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());