diff --git a/lib/modules/playlist/playlist_create_dialog.dart b/lib/modules/playlist/playlist_create_dialog.dart index 9619b2ee..516182e4 100644 --- a/lib/modules/playlist/playlist_create_dialog.dart +++ b/lib/modules/playlist/playlist_create_dialog.dart @@ -101,11 +101,17 @@ class PlaylistCreateDialog extends HookConsumerWidget { } else { await playlistNotifier.create(payload, onError); } + + if (trackIds.isNotEmpty) { + await playlistNotifier.addTracks(trackIds, onError); + } } finally { isSubmitting.value = false; if (context.mounted && !ref.read(playlistProvider(playlistId ?? "")).hasError) { - context.router.maybePop(); + context.router.maybePop( + await ref.read(playlistProvider(playlistId ?? "").future), + ); } } } diff --git a/lib/provider/spotify/playlist/playlist.dart b/lib/provider/spotify/playlist/playlist.dart index 6782fb35..28dc8726 100644 --- a/lib/provider/spotify/playlist/playlist.dart +++ b/lib/provider/spotify/playlist/playlist.dart @@ -98,6 +98,23 @@ class PlaylistNotifier extends FamilyAsyncNotifier { } }); } + + Future addTracks(List trackIds, [ValueChanged? onError]) async { + try { + if (state.value == null) return; + + final spotify = ref.read(spotifyProvider); + + await spotify.playlists.addTracks( + trackIds.map((id) => "spotify:track:$id").toList(), + state.value!.id!, + ); + } catch (e, stack) { + onError?.call(e); + AppLogger.reportError(e, stack); + rethrow; + } + } } final playlistProvider =