fix: create and delete playlist not working

This commit is contained in:
Kingkor Roy Tirtho 2025-08-01 22:39:15 +06:00
parent 93d6e0642b
commit 066fe2a326
5 changed files with 36 additions and 29 deletions

View File

@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer; import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/routes.gr.dart';

View File

@ -95,7 +95,11 @@ class PlaylistPage extends HookConsumerWidget {
if (!confirmed) return null; if (!confirmed) return null;
if (isFavoritePlaylist.asData!.value) { if (isFavoritePlaylist.asData!.value) {
if (isUserPlaylist) {
await favoritePlaylistsNotifier.delete(playlist.id);
} else {
await favoritePlaylistsNotifier.removeFavorite(playlist); await favoritePlaylistsNotifier.removeFavorite(playlist);
}
} else { } else {
await favoritePlaylistsNotifier.addFavorite(playlist); await favoritePlaylistsNotifier.addFavorite(playlist);
} }

View File

@ -64,15 +64,18 @@ class MetadataPluginSavedPlaylistsNotifier
} }
Future<void> delete(String playlistId) async { Future<void> delete(String playlistId) async {
await update((state) async { if (state.value == null) return;
(await metadataPlugin).playlist.deletePlaylist(playlistId); final oldState = state;
return state.copyWith( try {
items: state.items.where((e) => (e).id != playlistId).toList(), state = const AsyncLoading();
); await (await metadataPlugin).playlist.deletePlaylist(playlistId);
}); ref.invalidateSelf();
ref.invalidate(metadataPluginIsSavedPlaylistProvider(playlistId)); ref.invalidate(metadataPluginIsSavedPlaylistProvider(playlistId));
ref.invalidate(metadataPluginPlaylistTracksProvider(playlistId)); ref.invalidate(metadataPluginPlaylistTracksProvider(playlistId));
} catch (e) {
state = oldState;
rethrow;
}
} }
Future<void> addTracks(String playlistId, List<String> trackIds) async { Future<void> addTracks(String playlistId, List<String> trackIds) async {

View File

@ -40,8 +40,7 @@ class MetadataPluginPlaylistNotifier
if (userId == null) { if (userId == null) {
throw Exception('User ID is not available. Please log in first.'); throw Exception('User ID is not available. Please log in first.');
} }
await update( state = const AsyncValue.loading();
(prev) async {
try { try {
final playlist = await (await metadataPlugin).playlist.create( final playlist = await (await metadataPlugin).playlist.create(
userId, userId,
@ -50,13 +49,14 @@ class MetadataPluginPlaylistNotifier
public: public, public: public,
collaborative: collaborative, collaborative: collaborative,
); );
return playlist!; if (playlist != null) {
state = AsyncValue.data(playlist);
}
ref.invalidate(metadataPluginSavedPlaylistsProvider);
} catch (e) { } catch (e) {
onError?.call(e); onError?.call(e);
rethrow; rethrow;
} }
},
);
} }
Future<void> modify({ Future<void> modify({

View File

@ -127,7 +127,7 @@ class MetadataPluginPlaylistEndpoint {
} }
Future<void> deletePlaylist(String playlistId) async { Future<void> deletePlaylist(String playlistId) async {
await hetuMetadataPlaylist.invoke( return await hetuMetadataPlaylist.invoke(
"deletePlaylist", "deletePlaylist",
positionalArgs: [playlistId], positionalArgs: [playlistId],
); );