From db3e153409015c6517695878116147f8d8f6d3ef Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 26 Oct 2026 18:49:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(player):=20=E4=BD=BF=E7=94=A8=E6=A0=B9Overl?= =?UTF-8?q?ay=E6=89=BF=E8=BD=BD=E9=A3=98=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../player/widgets/player_double_tap_hearts.dart | 10 ++++++---- .../player/widgets/player_tap_gesture_region.dart | 1 + test/player/player_double_tap_hearts_test.dart | 13 ++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/pages/player/widgets/player_double_tap_hearts.dart b/lib/pages/player/widgets/player_double_tap_hearts.dart index 8f46837..3146699 100644 --- a/lib/pages/player/widgets/player_double_tap_hearts.dart +++ b/lib/pages/player/widgets/player_double_tap_hearts.dart @@ -38,10 +38,12 @@ const List<_HeartParticle> _hearts = [ class PlayerDoubleTapHeartBurst extends StatefulWidget { const PlayerDoubleTapHeartBurst({ super.key, + required this.burstId, required this.onCompleted, this.origin = Offset.zero, }); + final int burstId; final VoidCallback onCompleted; final Offset origin; @@ -66,7 +68,7 @@ class _PlayerDoubleTapHeartBurstState extends State if (kDebugMode) { debugPrint( '[player] phase=heart-burst-start ' - 'id=${identityHashCode(this)} count=${_hearts.length} ' + 'id=${widget.burstId} count=${_hearts.length} ' 'configuredMs=$total at=${widget.origin.dx.toStringAsFixed(1)},' '${widget.origin.dy.toStringAsFixed(1)}', ); @@ -84,7 +86,7 @@ class _PlayerDoubleTapHeartBurstState extends State if (kDebugMode) { debugPrint( '[player] phase=heart-burst-complete ' - 'id=${identityHashCode(this)} ' + 'id=${widget.burstId} ' 'configuredMs=${_controller.duration?.inMilliseconds ?? 0}', ); } @@ -99,7 +101,7 @@ class _PlayerDoubleTapHeartBurstState extends State : _lifetime.elapsedMilliseconds; debugPrint( '[player] phase=heart-burst-dispose ' - 'id=${identityHashCode(this)} elapsedMs=$elapsedMs ' + 'id=${widget.burstId} elapsedMs=$elapsedMs ' 'completed=${_completed ? 1 : 0}', ); if (!_completed) { @@ -107,7 +109,7 @@ class _PlayerDoubleTapHeartBurstState extends State maxFrames: 30, label: '[player] heart-burst-premature-dispose ' - 'id=${identityHashCode(this)} mount=tap-gesture-region', + 'id=${widget.burstId} mount=root-overlay', ); } } diff --git a/lib/pages/player/widgets/player_tap_gesture_region.dart b/lib/pages/player/widgets/player_tap_gesture_region.dart index d323bb0..a001021 100644 --- a/lib/pages/player/widgets/player_tap_gesture_region.dart +++ b/lib/pages/player/widgets/player_tap_gesture_region.dart @@ -167,6 +167,7 @@ class _PlayerTapGestureRegionState extends State { child: IgnorePointer( child: PlayerDoubleTapHeartBurst( key: ValueKey('heart-overlay-$id'), + burstId: id, origin: origin, onCompleted: () => _removeHeartOverlay(id), ), diff --git a/test/player/player_double_tap_hearts_test.dart b/test/player/player_double_tap_hearts_test.dart index bdae85b..8ae4781 100644 --- a/test/player/player_double_tap_hearts_test.dart +++ b/test/player/player_double_tap_hearts_test.dart @@ -10,7 +10,9 @@ void main() { ) async { await tester.pumpWidget( const MaterialApp( - home: Scaffold(body: PlayerDoubleTapHeartBurst(onCompleted: _noop)), + home: Scaffold( + body: PlayerDoubleTapHeartBurst(burstId: 1, onCompleted: _noop), + ), ), ); await tester.pump(const Duration(milliseconds: 200)); @@ -42,7 +44,9 @@ void main() { ) async { await tester.pumpWidget( const MaterialApp( - home: Scaffold(body: PlayerDoubleTapHeartBurst(onCompleted: _noop)), + home: Scaffold( + body: PlayerDoubleTapHeartBurst(burstId: 2, onCompleted: _noop), + ), ), ); @@ -61,7 +65,10 @@ void main() { await tester.pumpWidget( MaterialApp( home: Scaffold( - body: PlayerDoubleTapHeartBurst(onCompleted: () => completed = true), + body: PlayerDoubleTapHeartBurst( + burstId: 3, + onCompleted: () => completed = true, + ), ), ), );