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, + ), ), ), );