refactor: rename providers

This commit is contained in:
Kingkor Roy Tirtho 2024-04-12 11:06:03 +06:00
parent 2781127da1
commit 57ccf16311
56 changed files with 121 additions and 137 deletions

View File

@ -92,7 +92,7 @@ class SeekIntent extends Intent {
class SeekAction extends Action<SeekIntent> { class SeekAction extends Action<SeekIntent> {
@override @override
invoke(intent) async { invoke(intent) async {
final playlist = intent.ref.read(ProxyPlaylistNotifier.provider); final playlist = intent.ref.read(proxyPlaylistProvider);
if (playlist.isFetching) { if (playlist.isFetching) {
DirectionalFocusAction().invoke( DirectionalFocusAction().invoke(
DirectionalFocusIntent( DirectionalFocusIntent(

View File

@ -49,8 +49,7 @@ final routerProvider = Provider((ref) {
GoRoute( GoRoute(
path: "/", path: "/",
redirect: (context, state) async { redirect: (context, state) async {
final authNotifier = final authNotifier = ref.read(authenticationProvider.notifier);
ref.read(AuthenticationNotifier.provider.notifier);
final json = await authNotifier.box.get(authNotifier.cacheKey); final json = await authNotifier.box.get(authNotifier.cacheKey);
if (json?["cookie"] == null && if (json?["cookie"] == null &&

View File

@ -28,10 +28,10 @@ class AlbumCard extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playing = final playing =
useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying; useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying;
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
bool isPlaylistPlaying = useMemoized( bool isPlaylistPlaying = useMemoized(
() => playlist.containsCollection(album.id!), () => playlist.containsCollection(album.id!),

View File

@ -25,7 +25,7 @@ class ArtistCard extends HookConsumerWidget {
), ),
); );
final isBlackListed = ref.watch( final isBlackListed = ref.watch(
BlackListNotifier.provider.select( blacklistProvider.select(
(blacklist) => blacklist.contains( (blacklist) => blacklist.contains(
BlacklistedElement.artist(artist.id!, artist.name!), BlacklistedElement.artist(artist.id!, artist.name!),
), ),

View File

@ -14,8 +14,7 @@ class TokenLoginForm extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final authenticationNotifier = final authenticationNotifier = ref.watch(authenticationProvider.notifier);
ref.watch(AuthenticationNotifier.provider.notifier);
final directCodeController = useTextEditingController(); final directCodeController = useTextEditingController();
final mounted = useIsMounted(); final mounted = useIsMounted();

View File

@ -11,7 +11,7 @@ class HomeNewReleasesSection extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final newReleases = ref.watch(albumReleasesProvider); final newReleases = ref.watch(albumReleasesProvider);
final newReleasesNotifier = ref.read(albumReleasesProvider.notifier); final newReleasesNotifier = ref.read(albumReleasesProvider.notifier);

View File

@ -22,7 +22,7 @@ class UserAlbums extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final albumsQuery = ref.watch(favoriteAlbumsProvider); final albumsQuery = ref.watch(favoriteAlbumsProvider);
final albumsQueryNotifier = ref.watch(favoriteAlbumsProvider.notifier); final albumsQueryNotifier = ref.watch(favoriteAlbumsProvider.notifier);

View File

@ -21,7 +21,7 @@ class UserArtists extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final artistQuery = ref.watch(followedArtistsProvider); final artistQuery = ref.watch(followedArtistsProvider);

View File

@ -138,8 +138,8 @@ class UserLocalTracks extends HookConsumerWidget {
List<LocalTrack> tracks, { List<LocalTrack> tracks, {
LocalTrack? currentTrack, LocalTrack? currentTrack,
}) async { }) async {
final playlist = ref.read(ProxyPlaylistNotifier.provider); final playlist = ref.read(proxyPlaylistProvider);
final playback = ref.read(ProxyPlaylistNotifier.notifier); final playback = ref.read(proxyPlaylistProvider.notifier);
currentTrack ??= tracks.first; currentTrack ??= tracks.first;
final isPlaylistPlaying = playlist.containsTracks(tracks); final isPlaylistPlaying = playlist.containsTracks(tracks);
if (!isPlaylistPlaying) { if (!isPlaylistPlaying) {
@ -158,7 +158,7 @@ class UserLocalTracks extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final sortBy = useState<SortBy>(SortBy.none); final sortBy = useState<SortBy>(SortBy.none);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final trackSnapshot = ref.watch(localTracksProvider); final trackSnapshot = ref.watch(localTracksProvider);
final isPlaylistPlaying = final isPlaylistPlaying =
playlist.containsTracks(trackSnapshot.asData?.value ?? []); playlist.containsTracks(trackSnapshot.asData?.value ?? []);

View File

@ -26,7 +26,7 @@ class UserPlaylists extends HookConsumerWidget {
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final searchText = useState(''); final searchText = useState('');
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final playlistsQuery = ref.watch(favoritePlaylistsProvider); final playlistsQuery = ref.watch(favoritePlaylistsProvider);
final playlistsQueryNotifier = final playlistsQueryNotifier =

View File

@ -43,8 +43,8 @@ class PlayerView extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final currentTrack = ref.watch(ProxyPlaylistNotifier.provider.select( final currentTrack = ref.watch(proxyPlaylistProvider.select(
(value) => value.activeTrack, (value) => value.activeTrack,
)); ));
final isLocalTrack = currentTrack is LocalTrack; final isLocalTrack = currentTrack is LocalTrack;
@ -307,12 +307,11 @@ class PlayerView extends HookConsumerWidget {
builder: (context) => Consumer( builder: (context) => Consumer(
builder: (context, ref, _) { builder: (context, ref, _) {
final playlist = ref.watch( final playlist = ref.watch(
ProxyPlaylistNotifier proxyPlaylistProvider,
.provider,
); );
final playlistNotifier = final playlistNotifier =
ref.read( ref.read(
ProxyPlaylistNotifier proxyPlaylistProvider
.notifier, .notifier,
); );
return PlayerQueue return PlayerQueue

View File

@ -33,7 +33,7 @@ class PlayerActions extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final isLocalTrack = playlist.activeTrack is LocalTrack; final isLocalTrack = playlist.activeTrack is LocalTrack;
ref.watch(downloadManagerProvider); ref.watch(downloadManagerProvider);
final downloader = ref.watch(downloadManagerProvider.notifier); final downloader = ref.watch(downloadManagerProvider.notifier);
@ -46,9 +46,9 @@ class PlayerActions extends HookConsumerWidget {
]); ]);
final localTracks = [] /* ref.watch(localTracksProvider).value */; final localTracks = [] /* ref.watch(localTracksProvider).value */;
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final sleepTimer = ref.watch(SleepTimerNotifier.provider); final sleepTimer = ref.watch(sleepTimerProvider);
final sleepTimerNotifier = ref.watch(SleepTimerNotifier.notifier); final sleepTimerNotifier = ref.watch(sleepTimerProvider.notifier);
final isDownloaded = useMemoized(() { final isDownloaded = useMemoized(() {
return localTracks.any( return localTracks.any(

View File

@ -43,8 +43,8 @@ class PlayerControls extends HookConsumerWidget {
SeekIntent: SeekAction(), SeekIntent: SeekAction(),
}, },
[]); []);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final playing = final playing =
useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying; useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying;

View File

@ -24,8 +24,8 @@ class PlayerOverlay extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final canShow = playlist.activeTrack != null; final canShow = playlist.activeTrack != null;
final playing = final playing =

View File

@ -21,7 +21,7 @@ class PlayerTrackDetails extends HookConsumerWidget {
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final playback = ref.watch(ProxyPlaylistNotifier.provider); final playback = ref.watch(proxyPlaylistProvider);
return Row( return Row(
children: [ children: [

View File

@ -52,7 +52,7 @@ class SiblingTracksSheet extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final preferences = ref.watch(userPreferencesProvider); final preferences = ref.watch(userPreferencesProvider);
final isSearching = useState(false); final isSearching = useState(false);

View File

@ -20,8 +20,8 @@ class PlaylistCard extends HookConsumerWidget {
}); });
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlistQueue = ref.watch(ProxyPlaylistNotifier.provider); final playlistQueue = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final playing = final playing =
useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying; useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying;
bool isPlaylistPlaying = useMemoized( bool isPlaylistPlaying = useMemoized(

View File

@ -31,8 +31,8 @@ class BottomPlayer extends HookConsumerWidget {
final logger = getLogger(BottomPlayer); final logger = getLogger(BottomPlayer);
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final layoutMode = final layoutMode =
ref.watch(userPreferencesProvider.select((s) => s.layoutMode)); ref.watch(userPreferencesProvider.select((s) => s.layoutMode));

View File

@ -249,7 +249,7 @@ class SidebarFooter extends HookConsumerWidget {
placeholder: ImagePlaceholder.artist, placeholder: ImagePlaceholder.artist,
); );
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
if (mediaQuery.mdAndDown) { if (mediaQuery.mdAndDown) {
return IconButton( return IconButton(

View File

@ -14,7 +14,7 @@ class AnonymousFallback extends ConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final isLoggedIn = ref.watch(AuthenticationNotifier.provider) != null; final isLoggedIn = ref.watch(authenticationProvider) != null;
if (isLoggedIn && child != null) return child!; if (isLoggedIn && child != null) return child!;
return Center( return Center(

View File

@ -25,7 +25,7 @@ class HeartButton extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
if (auth == null) return const SizedBox.shrink(); if (auth == null) return const SizedBox.shrink();

View File

@ -95,8 +95,8 @@ class TrackOptions extends HookConsumerWidget {
WidgetRef ref, WidgetRef ref,
Track track, Track track,
) async { ) async {
final playback = ref.read(ProxyPlaylistNotifier.notifier); final playback = ref.read(proxyPlaylistProvider.notifier);
final playlist = ref.read(ProxyPlaylistNotifier.provider); final playlist = ref.read(proxyPlaylistProvider);
final spotify = ref.read(spotifyProvider); final spotify = ref.read(spotifyProvider);
final query = "${track.name} Radio"; final query = "${track.name} Radio";
final pages = final pages =
@ -159,12 +159,12 @@ class TrackOptions extends HookConsumerWidget {
final router = GoRouter.of(context); final router = GoRouter.of(context);
final ThemeData(:colorScheme) = Theme.of(context); final ThemeData(:colorScheme) = Theme.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playback = ref.watch(ProxyPlaylistNotifier.notifier); final playback = ref.watch(proxyPlaylistProvider.notifier);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
ref.watch(downloadManagerProvider); ref.watch(downloadManagerProvider);
final downloadManager = ref.watch(downloadManagerProvider.notifier); final downloadManager = ref.watch(downloadManagerProvider.notifier);
final blacklist = ref.watch(BlackListNotifier.provider); final blacklist = ref.watch(blacklistProvider);
final me = ref.watch(meProvider); final me = ref.watch(meProvider);
final favorites = useTrackToggleLike(track, ref); final favorites = useTrackToggleLike(track, ref);
@ -257,11 +257,11 @@ class TrackOptions extends HookConsumerWidget {
break; break;
case TrackOptionValue.blacklist: case TrackOptionValue.blacklist:
if (isBlackListed) { if (isBlackListed) {
ref.read(BlackListNotifier.provider.notifier).remove( ref.read(blacklistProvider.notifier).remove(
BlacklistedElement.track(track.id!, track.name!), BlacklistedElement.track(track.id!, track.name!),
); );
} else { } else {
ref.read(BlackListNotifier.provider.notifier).add( ref.read(blacklistProvider.notifier).add(
BlacklistedElement.track(track.id!, track.name!), BlacklistedElement.track(track.id!, track.name!),
); );
} }

View File

@ -52,7 +52,7 @@ class TrackTile extends HookConsumerWidget {
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final blacklist = ref.watch(BlackListNotifier.provider); final blacklist = ref.watch(blacklistProvider);
final isBlackListed = useMemoized( final isBlackListed = useMemoized(
() => blacklist.contains( () => blacklist.contains(

View File

@ -26,8 +26,8 @@ class TrackViewBodySection extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final props = InheritedTrackView.of(context); final props = InheritedTrackView.of(context);
final trackViewState = ref.watch(trackViewProvider(props.tracks)); final trackViewState = ref.watch(trackViewProvider(props.tracks));

View File

@ -22,7 +22,7 @@ class TrackViewBodyOptions extends HookConsumerWidget {
ref.watch(downloadManagerProvider); ref.watch(downloadManagerProvider);
final downloader = ref.watch(downloadManagerProvider.notifier); final downloader = ref.watch(downloadManagerProvider.notifier);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final audioSource = final audioSource =
ref.watch(userPreferencesProvider.select((s) => s.audioSource)); ref.watch(userPreferencesProvider.select((s) => s.audioSource));

View File

@ -18,8 +18,8 @@ class TrackViewHeaderActions extends HookConsumerWidget {
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final props = InheritedTrackView.of(context); final props = InheritedTrackView.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final isActive = playlist.collections.contains(props.collectionId); final isActive = playlist.collections.contains(props.collectionId);
@ -27,7 +27,7 @@ class TrackViewHeaderActions extends HookConsumerWidget {
final scaffoldMessenger = ScaffoldMessenger.of(context); final scaffoldMessenger = ScaffoldMessenger.of(context);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

View File

@ -26,8 +26,8 @@ class TrackViewHeaderButtons extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final props = InheritedTrackView.of(context); final props = InheritedTrackView.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final isActive = playlist.collections.contains(props.collectionId); final isActive = playlist.collections.contains(props.collectionId);

View File

@ -9,21 +9,20 @@ import 'package:spotube/provider/user_preferences/user_preferences_provider.dart
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
void useEndlessPlayback(WidgetRef ref) { void useEndlessPlayback(WidgetRef ref) {
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final playback = ref.watch(ProxyPlaylistNotifier.notifier); final playback = ref.watch(proxyPlaylistProvider.notifier);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final spotify = ref.watch(spotifyProvider); final spotify = ref.watch(spotifyProvider);
final endlessPlayback = final endlessPlayback =
ref.watch(userPreferencesProvider.select((s) => s.endlessPlayback)); ref.watch(userPreferencesProvider.select((s) => s.endlessPlayback));
useEffect( useEffect(
() { () {
if (!endlessPlayback || auth == null) return null; if (!endlessPlayback || auth == null) return null;
void listener(int index) async { void listener(int index) async {
try { try {
final playlist = ref.read(ProxyPlaylistNotifier.provider); final playlist = ref.read(proxyPlaylistProvider);
if (index != playlist.tracks.length - 1) return; if (index != playlist.tracks.length - 1) return;
final track = playlist.tracks.last; final track = playlist.tracks.last;
@ -57,7 +56,7 @@ void useEndlessPlayback(WidgetRef ref) {
await playback.addTracks( await playback.addTracks(
tracks.toList() tracks.toList()
..removeWhere((e) { ..removeWhere((e) {
final playlist = ref.read(ProxyPlaylistNotifier.provider); final playlist = ref.read(proxyPlaylistProvider);
final isDuplicate = playlist.tracks.any((t) => t.id == e.id); final isDuplicate = playlist.tracks.any((t) => t.id == e.id);
return e.id == track.id || isDuplicate; return e.id == track.id || isDuplicate;
}), }),

View File

@ -15,8 +15,8 @@ void useInitSysTray(WidgetRef ref) {
final initializeMenu = useCallback(() async { final initializeMenu = useCallback(() async {
systemTray.value?.destroy(); systemTray.value?.destroy();
final playlist = ref.read(ProxyPlaylistNotifier.provider); final playlist = ref.read(proxyPlaylistProvider);
final playlistQueue = ref.read(ProxyPlaylistNotifier.notifier); final playlistQueue = ref.read(proxyPlaylistProvider.notifier);
final preferences = ref.read(userPreferencesProvider); final preferences = ref.read(userPreferencesProvider);
if (!preferences.showSystemTrayIcon) { if (!preferences.showSystemTrayIcon) {
await systemTray.value?.destroy(); await systemTray.value?.destroy();
@ -105,7 +105,7 @@ void useInitSysTray(WidgetRef ref) {
useReassemble(initializeMenu); useReassemble(initializeMenu);
ref.listen<ProxyPlaylist?>( ref.listen<ProxyPlaylist?>(
ProxyPlaylistNotifier.provider, proxyPlaylistProvider,
(previous, next) { (previous, next) {
initializeMenu(); initializeMenu();
}, },

View File

@ -38,8 +38,8 @@ class ArtistPageHeader extends HookConsumerWidget {
xxl: textTheme.titleMedium, xxl: textTheme.titleMedium,
); );
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final blacklist = ref.watch(BlackListNotifier.provider); final blacklist = ref.watch(blacklistProvider);
final isBlackListed = blacklist.contains( final isBlackListed = blacklist.contains(
BlacklistedElement.artist(artistId, artist.name!), BlacklistedElement.artist(artistId, artist.name!),
); );
@ -187,14 +187,12 @@ class ArtistPageHeader extends HookConsumerWidget {
), ),
onPressed: () async { onPressed: () async {
if (isBlackListed) { if (isBlackListed) {
ref ref.read(blacklistProvider.notifier).remove(
.read(BlackListNotifier.provider.notifier)
.remove(
BlacklistedElement.artist( BlacklistedElement.artist(
artist.id!, artist.name!), artist.id!, artist.name!),
); );
} else { } else {
ref.read(BlackListNotifier.provider.notifier).add( ref.read(blacklistProvider.notifier).add(
BlacklistedElement.artist( BlacklistedElement.artist(
artist.id!, artist.name!), artist.id!, artist.name!),
); );

View File

@ -21,8 +21,8 @@ class ArtistPageTopTracks extends HookConsumerWidget {
final theme = Theme.of(context); final theme = Theme.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context); final scaffoldMessenger = ScaffoldMessenger.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final topTracksQuery = ref.watch(artistTopTracksProvider(artistId)); final topTracksQuery = ref.watch(artistTopTracksProvider(artistId));
final isPlaylistPlaying = playlist.containsTracks( final isPlaylistPlaying = playlist.containsTracks(

View File

@ -16,9 +16,8 @@ class LoginTutorial extends ConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
ref.watch(AuthenticationNotifier.provider); ref.watch(authenticationProvider);
final authenticationNotifier = final authenticationNotifier = ref.watch(authenticationProvider.notifier);
ref.watch(AuthenticationNotifier.provider.notifier);
final key = GlobalKey<State<IntroductionScreen>>(); final key = GlobalKey<State<IntroductionScreen>>();
final theme = Theme.of(context); final theme = Theme.of(context);

View File

@ -25,7 +25,7 @@ class PlaylistGenerateResultPage extends HookConsumerWidget {
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final router = GoRouter.of(context); final router = GoRouter.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context); final scaffoldMessenger = ScaffoldMessenger.of(context);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final generatedPlaylist = ref.watch(generatePlaylistProvider(state)); final generatedPlaylist = ref.watch(generatePlaylistProvider(state));

View File

@ -28,7 +28,7 @@ class LyricsPage extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
String albumArt = useMemoized( String albumArt = useMemoized(
() => (playlist.activeTrack?.album?.images).asUrlString( () => (playlist.activeTrack?.album?.images).asUrlString(
index: (playlist.activeTrack?.album?.images?.length ?? 1) - 1, index: (playlist.activeTrack?.album?.images?.length ?? 1) - 1,
@ -60,7 +60,7 @@ class LyricsPage extends HookConsumerWidget {
const Spacer(), const Spacer(),
Consumer( Consumer(
builder: (context, ref, child) { builder: (context, ref, child) {
final playback = ref.watch(ProxyPlaylistNotifier.provider); final playback = ref.watch(proxyPlaylistProvider);
final lyric = final lyric =
ref.watch(syncedLyricsProvider(playback.activeTrack)); ref.watch(syncedLyricsProvider(playback.activeTrack));
final providerName = lyric.asData?.value.provider; final providerName = lyric.asData?.value.provider;
@ -80,7 +80,7 @@ class LyricsPage extends HookConsumerWidget {
), ),
); );
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
if (auth == null) { if (auth == null) {
return Scaffold( return Scaffold(

View File

@ -29,7 +29,7 @@ class MiniLyricsPage extends HookConsumerWidget {
final update = useForceUpdate(); final update = useForceUpdate();
final wasMaximized = useRef<bool>(false); final wasMaximized = useRef<bool>(false);
final playlistQueue = ref.watch(ProxyPlaylistNotifier.provider); final playlistQueue = ref.watch(proxyPlaylistProvider);
final areaActive = useState(false); final areaActive = useState(false);
final hoverMode = useState(true); final hoverMode = useState(true);
@ -42,7 +42,7 @@ class MiniLyricsPage extends HookConsumerWidget {
return null; return null;
}, []); }, []);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
if (auth == null) { if (auth == null) {
return const Scaffold( return const Scaffold(
@ -222,15 +222,15 @@ class MiniLyricsPage extends HookConsumerWidget {
), ),
builder: (context) { builder: (context) {
return Consumer(builder: (context, ref, _) { return Consumer(builder: (context, ref, _) {
final playlist = ref final playlist =
.watch(ProxyPlaylistNotifier.provider); ref.watch(proxyPlaylistProvider);
return PlayerQueue return PlayerQueue
.fromProxyPlaylistNotifier( .fromProxyPlaylistNotifier(
floating: true, floating: true,
playlist: playlist, playlist: playlist,
notifier: ref notifier: ref
.read(ProxyPlaylistNotifier.notifier), .read(proxyPlaylistProvider.notifier),
); );
}); });
}, },

View File

@ -27,7 +27,7 @@ class PlainLyrics extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final lyricsQuery = ref.watch(syncedLyricsProvider(playlist.activeTrack)); final lyricsQuery = ref.watch(syncedLyricsProvider(playlist.activeTrack));
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final textTheme = Theme.of(context).textTheme; final textTheme = Theme.of(context).textTheme;

View File

@ -32,7 +32,7 @@ class SyncedLyrics extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final controller = useAutoScrollController(); final controller = useAutoScrollController();
@ -54,7 +54,7 @@ class SyncedLyrics extends HookConsumerWidget {
final textTheme = Theme.of(context).textTheme; final textTheme = Theme.of(context).textTheme;
ref.listen( ref.listen(
ProxyPlaylistNotifier.provider.select((s) => s.activeTrack), proxyPlaylistProvider.select((s) => s.activeTrack),
(previous, next) { (previous, next) {
controller.scrollToIndex(0); controller.scrollToIndex(0);
ref.read(syncedLyricsDelayProvider.notifier).state = 0; ref.read(syncedLyricsDelayProvider.notifier).state = 0;

View File

@ -13,8 +13,7 @@ class WebViewLogin extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final mounted = useIsMounted(); final mounted = useIsMounted();
final authenticationNotifier = final authenticationNotifier = ref.watch(authenticationProvider.notifier);
ref.watch(AuthenticationNotifier.provider.notifier);
if (kIsDesktop) { if (kIsDesktop) {
const Scaffold( const Scaffold(

View File

@ -221,9 +221,9 @@ class RootApp extends HookConsumerWidget {
), ),
child: Consumer( child: Consumer(
builder: (context, ref, _) { builder: (context, ref, _) {
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = final playlistNotifier =
ref.read(ProxyPlaylistNotifier.notifier); ref.read(proxyPlaylistProvider.notifier);
return PlayerQueue.fromProxyPlaylistNotifier( return PlayerQueue.fromProxyPlaylistNotifier(
floating: true, floating: true,

View File

@ -34,9 +34,8 @@ class SearchPage extends HookConsumerWidget {
final searchTerm = ref.watch(searchTermStateProvider); final searchTerm = ref.watch(searchTermStateProvider);
final controller = useSearchController(); final controller = useSearchController();
ref.watch(AuthenticationNotifier.provider); ref.watch(authenticationProvider);
final authenticationNotifier = final authenticationNotifier = ref.watch(authenticationProvider.notifier);
ref.watch(AuthenticationNotifier.provider.notifier);
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final searchTrack = ref.watch(searchProvider(SearchType.track)); final searchTrack = ref.watch(searchProvider(SearchType.track));

View File

@ -24,8 +24,8 @@ class SearchTracksSection extends HookConsumerWidget {
ref.watch(searchProvider(SearchType.track).notifier); ref.watch(searchProvider(SearchType.track).notifier);
final tracks = searchTrack.asData?.value.items.cast<Track>() ?? []; final tracks = searchTrack.asData?.value.items.cast<Track>() ?? [];
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.provider.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final theme = Theme.of(context); final theme = Theme.of(context);
return Column( return Column(

View File

@ -16,7 +16,7 @@ class BlackListPage extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final controller = useScrollController(); final controller = useScrollController();
final blacklist = ref.watch(BlackListNotifier.provider); final blacklist = ref.watch(blacklistProvider);
final searchText = useState(""); final searchText = useState("");
final filteredBlacklist = useMemoized( final filteredBlacklist = useMemoized(
@ -74,7 +74,7 @@ class BlackListPage extends HookConsumerWidget {
icon: Icon(SpotubeIcons.trash, color: Colors.red[400]), icon: Icon(SpotubeIcons.trash, color: Colors.red[400]),
onPressed: () { onPressed: () {
ref ref
.read(BlackListNotifier.provider.notifier) .read(blacklistProvider.notifier)
.remove(filteredBlacklist.elementAt(index)); .remove(filteredBlacklist.elementAt(index));
}, },
), ),

View File

@ -15,7 +15,7 @@ class SettingsAccountSection extends HookConsumerWidget {
@override @override
Widget build(context, ref) { Widget build(context, ref) {
final theme = Theme.of(context); final theme = Theme.of(context);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
final scrobbler = ref.watch(scrobblerProvider); final scrobbler = ref.watch(scrobblerProvider);
final router = GoRouter.of(context); final router = GoRouter.of(context);
@ -86,7 +86,7 @@ class SettingsAccountSection extends HookConsumerWidget {
trailing: FilledButton( trailing: FilledButton(
style: logoutBtnStyle, style: logoutBtnStyle,
onPressed: () async { onPressed: () async {
ref.read(AuthenticationNotifier.provider.notifier).logout(); ref.read(authenticationProvider.notifier).logout();
GoRouter.of(context).pop(); GoRouter.of(context).pop();
}, },
child: Text(context.l10n.logout), child: Text(context.l10n.logout),

View File

@ -32,8 +32,8 @@ class TrackPage extends HookConsumerWidget {
final ThemeData(:textTheme, :colorScheme) = Theme.of(context); final ThemeData(:textTheme, :colorScheme) = Theme.of(context);
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider); final playlist = ref.watch(proxyPlaylistProvider);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); final playlistNotifier = ref.watch(proxyPlaylistProvider.notifier);
final isActive = playlist.activeTrack?.id == trackId; final isActive = playlist.activeTrack?.id == trackId;

View File

@ -95,11 +95,6 @@ class AuthenticationCredentials {
class AuthenticationNotifier class AuthenticationNotifier
extends PersistedStateNotifier<AuthenticationCredentials?> { extends PersistedStateNotifier<AuthenticationCredentials?> {
static final provider =
StateNotifierProvider<AuthenticationNotifier, AuthenticationCredentials?>(
(ref) => AuthenticationNotifier(),
);
bool get isLoggedIn => state != null; bool get isLoggedIn => state != null;
AuthenticationNotifier() : super(null, "authentication", encrypted: true); AuthenticationNotifier() : super(null, "authentication", encrypted: true);
@ -154,3 +149,8 @@ class AuthenticationNotifier
return state?.toJson() ?? {}; return state?.toJson() ?? {};
} }
} }
final authenticationProvider =
StateNotifierProvider<AuthenticationNotifier, AuthenticationCredentials?>(
(ref) => AuthenticationNotifier(),
);

View File

@ -43,11 +43,6 @@ class BlackListNotifier
extends PersistedStateNotifier<Set<BlacklistedElement>> { extends PersistedStateNotifier<Set<BlacklistedElement>> {
BlackListNotifier() : super({}, "blacklist"); BlackListNotifier() : super({}, "blacklist");
static final provider =
StateNotifierProvider<BlackListNotifier, Set<BlacklistedElement>>(
(ref) => BlackListNotifier(),
);
void add(BlacklistedElement element) { void add(BlacklistedElement element) {
state = state.union({element}); state = state.union({element});
} }
@ -106,3 +101,8 @@ class BlackListNotifier
return {'blacklist': state.map((e) => e.toJson()).toList()}; return {'blacklist': state.map((e) => e.toJson()).toList()};
} }
} }
final blacklistProvider =
StateNotifierProvider<BlackListNotifier, Set<BlacklistedElement>>((ref) {
return BlackListNotifier();
});

View File

@ -31,7 +31,7 @@ final connectServerProvider = FutureProvider((ref) async {
ref.watch(userPreferencesProvider.select((s) => s.enableConnect)); ref.watch(userPreferencesProvider.select((s) => s.enableConnect));
final resolvedService = await ref final resolvedService = await ref
.watch(connectClientsProvider.selectAsync((s) => s.resolvedService)); .watch(connectClientsProvider.selectAsync((s) => s.resolvedService));
final playbackNotifier = ref.read(ProxyPlaylistNotifier.notifier); final playbackNotifier = ref.read(proxyPlaylistProvider.notifier);
if (!enabled || resolvedService != null) { if (!enabled || resolvedService != null) {
return null; return null;
@ -57,7 +57,7 @@ final connectServerProvider = FutureProvider((ref) async {
_connectClientStreamController.add(origin); _connectClientStreamController.add(origin);
ref.listen( ref.listen(
ProxyPlaylistNotifier.provider, proxyPlaylistProvider,
(previous, next) { (previous, next) {
channel.sink.add( channel.sink.add(
WebSocketQueueEvent(next).toJson(), WebSocketQueueEvent(next).toJson(),

View File

@ -5,6 +5,6 @@ import 'package:spotube/services/custom_spotify_endpoints/spotify_endpoints.dart
final customSpotifyEndpointProvider = Provider<CustomSpotifyEndpoints>((ref) { final customSpotifyEndpointProvider = Provider<CustomSpotifyEndpoints>((ref) {
ref.watch(spotifyProvider); ref.watch(spotifyProvider);
final auth = ref.watch(AuthenticationNotifier.provider); final auth = ref.watch(authenticationProvider);
return CustomSpotifyEndpoints(auth?.accessToken ?? ""); return CustomSpotifyEndpoints(auth?.accessToken ?? "");
}); });

View File

@ -57,7 +57,7 @@ final discordProvider = ChangeNotifierProvider(
(ref) { (ref) {
final isEnabled = final isEnabled =
ref.watch(userPreferencesProvider.select((s) => s.discordPresence)); ref.watch(userPreferencesProvider.select((s) => s.discordPresence));
final playback = ref.read(ProxyPlaylistNotifier.provider); final playback = ref.read(proxyPlaylistProvider);
final discord = Discord(isEnabled); final discord = Discord(isEnabled);
if (playback.activeTrack != null) { if (playback.activeTrack != null) {

View File

@ -28,18 +28,9 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist> {
ScrobblerNotifier get scrobbler => ref.read(scrobblerProvider.notifier); ScrobblerNotifier get scrobbler => ref.read(scrobblerProvider.notifier);
UserPreferences get preferences => ref.read(userPreferencesProvider); UserPreferences get preferences => ref.read(userPreferencesProvider);
ProxyPlaylist get playlist => state; ProxyPlaylist get playlist => state;
BlackListNotifier get blacklist => BlackListNotifier get blacklist => ref.read(blacklistProvider.notifier);
ref.read(BlackListNotifier.provider.notifier);
Discord get discord => ref.read(discordProvider); Discord get discord => ref.read(discordProvider);
static final provider =
StateNotifierProvider<ProxyPlaylistNotifier, ProxyPlaylist>(
(ref) => ProxyPlaylistNotifier(ref),
);
static AlwaysAliveRefreshable<ProxyPlaylistNotifier> get notifier =>
provider.notifier;
List<StreamSubscription> _subscriptions = []; List<StreamSubscription> _subscriptions = [];
ProxyPlaylistNotifier(this.ref) : super(ProxyPlaylist({}), "playlist") { ProxyPlaylistNotifier(this.ref) : super(ProxyPlaylist({}), "playlist") {
@ -230,3 +221,8 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist> {
super.dispose(); super.dispose();
} }
} }
final proxyPlaylistProvider =
StateNotifierProvider<ProxyPlaylistNotifier, ProxyPlaylist>(
(ref) => ProxyPlaylistNotifier(ref),
);

View File

@ -28,7 +28,7 @@ class ActiveSourcedTrackNotifier extends Notifier<SourcedTrack?> {
state = newTrack; state = newTrack;
await audioPlayer.pause(); await audioPlayer.pause();
final playbackNotifier = ref.read(ProxyPlaylistNotifier.notifier); final playbackNotifier = ref.read(proxyPlaylistProvider.notifier);
final oldActiveIndex = audioPlayer.currentIndex; final oldActiveIndex = audioPlayer.currentIndex;
await playbackNotifier.addTracksAtFirst([newTrack]); await playbackNotifier.addTracksAtFirst([newTrack]);

View File

@ -20,7 +20,7 @@ import 'package:spotube/provider/user_preferences/user_preferences_state.dart';
class PlaybackServer { class PlaybackServer {
final Ref ref; final Ref ref;
UserPreferences get userPreferences => ref.read(userPreferencesProvider); UserPreferences get userPreferences => ref.read(userPreferencesProvider);
ProxyPlaylist get playlist => ref.read(ProxyPlaylistNotifier.provider); ProxyPlaylist get playlist => ref.read(proxyPlaylistProvider);
final Logger logger; final Logger logger;
final Dio dio; final Dio dio;

View File

@ -12,7 +12,7 @@ final sourcedTrackProvider =
} }
ref.listen( ref.listen(
ProxyPlaylistNotifier.provider, proxyPlaylistProvider,
(old, next) { (old, next) {
if (next.tracks.isEmpty || if (next.tracks.isEmpty ||
next.tracks.none((element) => element.id == track.id)) { next.tracks.none((element) => element.id == track.id)) {

View File

@ -8,13 +8,6 @@ class SleepTimerNotifier extends StateNotifier<Duration?> {
Timer? _timer; Timer? _timer;
static final provider = StateNotifierProvider<SleepTimerNotifier, Duration?>(
(ref) => SleepTimerNotifier(),
);
static AlwaysAliveRefreshable<SleepTimerNotifier> get notifier =>
provider.notifier;
void setSleepTimer(Duration duration) { void setSleepTimer(Duration duration) {
state = duration; state = duration;
@ -29,3 +22,7 @@ class SleepTimerNotifier extends StateNotifier<Duration?> {
_timer?.cancel(); _timer?.cancel();
} }
} }
final sleepTimerProvider = StateNotifierProvider<SleepTimerNotifier, Duration?>(
(ref) => SleepTimerNotifier(),
);

View File

@ -6,7 +6,7 @@ import 'package:spotube/provider/authentication_provider.dart';
import 'package:spotube/utils/primitive_utils.dart'; import 'package:spotube/utils/primitive_utils.dart';
final spotifyProvider = Provider<SpotifyApi>((ref) { final spotifyProvider = Provider<SpotifyApi>((ref) {
final authState = ref.watch(AuthenticationNotifier.provider); final authState = ref.watch(authenticationProvider);
final anonCred = PrimitiveUtils.getRandomElement(Env.spotifySecrets); final anonCred = PrimitiveUtils.getRandomElement(Env.spotifySecrets);
if (authState == null) { if (authState == null) {

View File

@ -52,7 +52,7 @@ class UserPreferencesNotifier extends PersistedStateNotifier<UserPreferences> {
if (!sync) { if (!sync) {
ref.read(paletteProvider.notifier).state = null; ref.read(paletteProvider.notifier).state = null;
} else { } else {
ref.read(ProxyPlaylistNotifier.notifier).updatePalette(); ref.read(proxyPlaylistProvider.notifier).updatePalette();
} }
} }