spotube/lib/components/heart_button/use_track_toggle_like.dart
2025-06-16 14:09:20 +06:00

33 lines
954 B
Dart

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/metadata_plugin/library/tracks.dart';
typedef UseTrackToggleLike = ({
bool isLiked,
Future<void> Function(SpotubeTrackObject track) toggleTrackLike,
});
UseTrackToggleLike useTrackToggleLike(SpotubeTrackObject track, WidgetRef ref) {
final savedTracksNotifier =
ref.watch(metadataPluginSavedTracksProvider.notifier);
final isSavedTrack = ref.watch(
metadataPluginIsSavedTrackProvider(track.id),
);
return (
isLiked: isSavedTrack.asData?.value ?? false,
toggleTrackLike: (track) async {
final isLikedTrack = await ref.read(
metadataPluginIsSavedTrackProvider(track.id).future,
);
if (isLikedTrack) {
await savedTracksNotifier.removeFavorite([track]);
} else {
await savedTracksNotifier.addFavorite([track]);
}
},
);
}