mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
40 lines
1.0 KiB
Dart
40 lines
1.0 KiB
Dart
part of '../spotify.dart';
|
|
|
|
class LikedTracksNotifier extends AsyncNotifier<List<Track>> {
|
|
@override
|
|
FutureOr<List<Track>> build() async {
|
|
final spotify = ref.watch(spotifyProvider);
|
|
final savedTracked = await spotify.invoke(
|
|
(api) => api.tracks.me.saved.all(),
|
|
);
|
|
|
|
return savedTracked.map((e) => e.track!).toList();
|
|
}
|
|
|
|
Future<void> 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.invoke(
|
|
(api) => api.tracks.me.removeOne(track.id!),
|
|
);
|
|
return tracks.where((e) => e.id != track.id).toList();
|
|
} else {
|
|
await spotify.invoke(
|
|
(api) => api.tracks.me.saveOne(track.id!),
|
|
);
|
|
return [track, ...tracks];
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
final likedTracksProvider =
|
|
AsyncNotifierProvider<LikedTracksNotifier, List<Track>>(
|
|
() => LikedTracksNotifier(),
|
|
);
|