From a9c2c742960195603f13b79e86c8bca1ef6c23ba Mon Sep 17 00:00:00 2001 From: Chaphasilor Date: Sun, 28 Apr 2024 20:21:42 +0200 Subject: [PATCH] don't use old values of metadata provider --- lib/components/AlbumScreen/song_menu.dart | 2 -- lib/screens/lyrics_screen.dart | 5 +++-- lib/screens/player_screen.dart | 4 ++-- lib/services/current_track_metadata_provider.dart | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/components/AlbumScreen/song_menu.dart b/lib/components/AlbumScreen/song_menu.dart index e75a32d3..e333a0ee 100644 --- a/lib/components/AlbumScreen/song_menu.dart +++ b/lib/components/AlbumScreen/song_menu.dart @@ -191,8 +191,6 @@ class _SongMenuState extends ConsumerState { Widget build(BuildContext context) { return Consumer(builder: (context, ref, child) { - final metadata = ref.watch(currentTrackMetadataProvider).value; - final iconColor = _imageTheme?.primary ?? Theme.of(context).iconTheme.color ?? Colors.white; diff --git a/lib/screens/lyrics_screen.dart b/lib/screens/lyrics_screen.dart index 3cea29a4..3e07233d 100644 --- a/lib/screens/lyrics_screen.dart +++ b/lib/screens/lyrics_screen.dart @@ -214,11 +214,12 @@ class _LyricsViewState extends ConsumerState with WidgetsBindingObse @override Widget build(BuildContext context) { - final metadata = ref.watch(currentTrackMetadataProvider); + final metadata = ref.watch(currentTrackMetadataProvider).unwrapPrevious(); final _audioHandler = GetIt.instance(); - final isSynchronizedLyrics = metadata.value?.lyrics?.lyrics?.first.start != null; + //!!! use unwrapPrevious() to prevent getting previous values. If we don't have the lyrics for the current song yet, we want to show the loading state, and not the lyrics for the previous track + final isSynchronizedLyrics = metadata.valueOrNull?.lyrics?.lyrics?.first.start != null; Widget getEmptyState({ required String message, diff --git a/lib/screens/player_screen.dart b/lib/screens/player_screen.dart index 9e041eaa..12c4d1ec 100644 --- a/lib/screens/player_screen.dart +++ b/lib/screens/player_screen.dart @@ -282,10 +282,10 @@ class _PlayerScreenContent extends StatelessWidget { return Consumer( builder: (context, ref, child) { - final metadata = ref.watch(currentTrackMetadataProvider); + final metadata = ref.watch(currentTrackMetadataProvider).unwrapPrevious(); final isLyricsLoading = metadata.isLoading || metadata.isRefreshing; - final isLyricsAvailable = (metadata.value?.hasLyrics ?? false) && (metadata.value?.lyrics != null || metadata.isLoading) && !metadata.hasError; + final isLyricsAvailable = (metadata.valueOrNull?.hasLyrics ?? false) && (metadata.valueOrNull?.lyrics != null || metadata.isLoading) && !metadata.hasError; IconData getLyricsIcon() { if (!isLyricsLoading && !isLyricsAvailable) { return TablerIcons.microphone_2_off; diff --git a/lib/services/current_track_metadata_provider.dart b/lib/services/current_track_metadata_provider.dart index acf99d3d..d156d885 100644 --- a/lib/services/current_track_metadata_provider.dart +++ b/lib/services/current_track_metadata_provider.dart @@ -35,6 +35,6 @@ final currentTrackMetadataProvider = } return null; }); - + final currentSongProvider = StreamProvider( (_) => GetIt.instance().getCurrentTrackStream());