fix(mobile): 优化火柴人动画布局避免标签重叠

- 昵称和数量标签顶部对齐在同一水平高度
- 添加4px最小间距防止起步阶段标签重叠
- 火柴人从昵称右边开始移动到红旗位置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-24 01:09:27 -08:00
parent 6745721399
commit c1c4a52ad3
1 changed files with 78 additions and 78 deletions

View File

@ -234,24 +234,27 @@ class _StickmanRaceWidgetState extends State<StickmanRaceWidget>
// //
final bounce = _bounceController.value * 3; final bounce = _bounceController.value * 3;
// - padding(32) - padding(32) - (40) - (30) // - padding(32) - padding(32) - (40)
// 100% // 100%
final screenWidth = MediaQuery.of(context).size.width; final screenWidth = MediaQuery.of(context).size.width;
final containerWidth = screenWidth - 32 - 32; // padding + padding final containerWidth = screenWidth - 32 - 32; // padding + padding
final stickmanHalfWidth = 30.0; // final stickmanWidth = 60.0; // +
final flagAreaWidth = 40.0; // right:824+ final flagAreaWidth = 40.0; //
final nicknameAreaWidth = 65.0; // final nicknameAreaWidth = 65.0; //
final availableWidth = containerWidth - flagAreaWidth - stickmanHalfWidth - nicknameAreaWidth; final gap = 4.0; //
final leftPosition = nicknameAreaWidth + availableWidth * horizontalProgress; //
final availableWidth = containerWidth - nicknameAreaWidth - gap - stickmanWidth - flagAreaWidth;
final stickmanLeftPosition = nicknameAreaWidth + gap + availableWidth * horizontalProgress;
return Positioned( return Positioned(
left: 0, left: 0,
top: verticalPosition - bounce, top: verticalPosition - bounce,
child: SizedBox(
width: containerWidth,
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
// - // -
SizedBox( SizedBox(
width: nicknameAreaWidth, width: nicknameAreaWidth,
child: Container( child: Container(
@ -260,7 +263,7 @@ class _StickmanRaceWidgetState extends State<StickmanRaceWidget>
color: data.isCurrentUser color: data.isCurrentUser
? const Color(0xFFD4AF37).withValues(alpha: 0.2) ? const Color(0xFFD4AF37).withValues(alpha: 0.2)
: Colors.white.withValues(alpha: 0.8), : Colors.white.withValues(alpha: 0.8),
borderRadius: BorderRadius.circular(4), borderRadius: BorderRadius.circular(8),
border: data.isCurrentUser border: data.isCurrentUser
? Border.all(color: const Color(0xFFD4AF37), width: 1) ? Border.all(color: const Color(0xFFD4AF37), width: 1)
: null, : null,
@ -281,12 +284,11 @@ class _StickmanRaceWidgetState extends State<StickmanRaceWidget>
), ),
), ),
), ),
// // +
SizedBox( SizedBox(
width: leftPosition - nicknameAreaWidth + stickmanHalfWidth * 2, width: stickmanLeftPosition - nicknameAreaWidth,
child: Row( ),
mainAxisAlignment: MainAxisAlignment.end, //
children: [
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -326,8 +328,6 @@ class _StickmanRaceWidgetState extends State<StickmanRaceWidget>
], ],
), ),
), ),
],
),
); );
}, },
); );