part of '../spotify.dart'; class LikedTracksNotifier extends AsyncNotifier> with Persistence { LikedTracksNotifier() { load(); } @override FutureOr> build() async { final spotify = ref.watch(spotifyProvider); final savedTracked = await spotify.tracks.me.saved.all(); return savedTracked.map((e) => e.track!).toList(); } Future toggleFavorite(Track track) async { if (state.value == null) return; final spotify = ref.read(spotifyProvider); await update((tracks) async { final isLiked = tracks.map((e) => e.id).contains(track.id); if (isLiked) { await spotify.tracks.me.removeOne(track.id!); return tracks.where((e) => e.id != track.id).toList(); } else { await spotify.tracks.me.saveOne(track.id!); return [track, ...tracks]; } }); } @override FutureOr> fromJson(Map json) { return (json['tracks'] as List).map((e) => Track.fromJson(e)).toList(); } @override Map toJson(List data) { return { 'tracks': data.map((e) => e.toJson()).toList(), }; } } final likedTracksProvider = AsyncNotifierProvider>( () => LikedTracksNotifier(), );