From e7846734b0ab307b698765d96342889b9b10d244 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 14 Dec 2025 23:35:47 +0800 Subject: [PATCH] :dizzy: More synced player --- lib/ui/screens/player_screen.dart | 20 +++++++++++++++++--- lib/ui/widgets/mini_player.dart | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/ui/screens/player_screen.dart b/lib/ui/screens/player_screen.dart index 319d89b..3a461e9 100644 --- a/lib/ui/screens/player_screen.dart +++ b/lib/ui/screens/player_screen.dart @@ -545,6 +545,7 @@ class _PlayerControls extends HookWidget { IconButton( icon: StreamBuilder( stream: player.stream.shuffle, + initialData: player.state.shuffle, builder: (context, snapshot) { final shuffle = snapshot.data ?? false; return Icon( @@ -569,12 +570,24 @@ class _PlayerControls extends HookWidget { // Play/Pause StreamBuilder( stream: player.stream.playing, + initialData: player.state.playing, builder: (context, snapshot) { final playing = snapshot.data ?? false; return IconButton.filled( - icon: Icon( - playing ? Icons.pause : Icons.play_arrow, - size: 48, + icon: AnimatedSwitcher( + duration: const Duration(milliseconds: 100), + transitionBuilder: + (Widget child, Animation animation) { + return ScaleTransition( + scale: animation, + child: child, + ); + }, + child: Icon( + playing ? Icons.pause : Icons.play_arrow, + key: ValueKey(playing), + size: 48, + ), ), onPressed: playing ? player.pause : player.play, iconSize: 48, @@ -592,6 +605,7 @@ class _PlayerControls extends HookWidget { IconButton( icon: StreamBuilder( stream: player.stream.playlistMode, + initialData: player.state.playlistMode, builder: (context, snapshot) { final mode = snapshot.data ?? PlaylistMode.none; IconData icon; diff --git a/lib/ui/widgets/mini_player.dart b/lib/ui/widgets/mini_player.dart index 1dbe07a..78b2d29 100644 --- a/lib/ui/widgets/mini_player.dart +++ b/lib/ui/widgets/mini_player.dart @@ -162,6 +162,7 @@ class MiniPlayer extends HookConsumerWidget { ), StreamBuilder( stream: player.stream.playing, + initialData: player.state.playing, builder: (context, snapshot) { final playing = snapshot.data ?? false; return Padding(