mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
feat(playlist): show confirmation before deleting user playlist #1222
This commit is contained in:
parent
e964f61d38
commit
9f9244062a
@ -70,9 +70,9 @@ class TrackViewHeaderActions extends HookConsumerWidget {
|
||||
tooltip: props.isLiked
|
||||
? context.l10n.remove_from_favorites
|
||||
: context.l10n.save_as_favorite,
|
||||
onPressed: () {
|
||||
props.onHeart?.call();
|
||||
if (isUserPlaylist) {
|
||||
onPressed: () async {
|
||||
final shouldPop = await props.onHeart?.call();
|
||||
if (isUserPlaylist && shouldPop == true && context.mounted) {
|
||||
context.pop();
|
||||
}
|
||||
},
|
||||
|
@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fl_query/fl_query.dart';
|
||||
import 'package:flutter/material.dart' hide Page;
|
||||
import 'package:spotify/spotify.dart';
|
||||
@ -62,7 +64,7 @@ class InheritedTrackView extends InheritedWidget {
|
||||
final String shareUrl;
|
||||
|
||||
// events
|
||||
final VoidCallback? onHeart; // if null heart button will hidden
|
||||
final FutureOr<bool?> Function()? onHeart; // if null heart button will hidden
|
||||
|
||||
const InheritedTrackView({
|
||||
super.key,
|
||||
|
@ -290,5 +290,7 @@
|
||||
"start_a_radio": "Start a Radio",
|
||||
"how_to_start_radio": "How do you want to start the radio?",
|
||||
"replace_queue_question": "Do you want to replace the current queue or append to it?",
|
||||
"endless_playback": "Endless Playback"
|
||||
"endless_playback": "Endless Playback",
|
||||
"delete_playlist": "Delete Playlist",
|
||||
"delete_playlist_confirmation": "Are you sure you want to delete this playlist?"
|
||||
}
|
@ -2,8 +2,11 @@ import 'package:flutter/material.dart' hide Page;
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/components/shared/dialogs/prompt_dialog.dart';
|
||||
import 'package:spotube/components/shared/tracks_view/sections/body/use_is_user_playlist.dart';
|
||||
import 'package:spotube/components/shared/tracks_view/track_view.dart';
|
||||
import 'package:spotube/components/shared/tracks_view/track_view_props.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/extensions/infinite_query.dart';
|
||||
import 'package:spotube/provider/spotify_provider.dart';
|
||||
import 'package:spotube/services/mutations/mutations.dart';
|
||||
@ -45,6 +48,8 @@ class PlaylistPage extends HookConsumerWidget {
|
||||
],
|
||||
);
|
||||
|
||||
final isUserPlaylist = useIsUserPlaylist(ref, playlist.id!);
|
||||
|
||||
return InheritedTrackView(
|
||||
collectionId: playlist.id!,
|
||||
image: TypeConversionUtils.image_X_UrlString(
|
||||
@ -72,9 +77,20 @@ class PlaylistPage extends HookConsumerWidget {
|
||||
shareUrl: playlist.externalUrls?.spotify ?? "",
|
||||
onHeart: () async {
|
||||
if (!isLikedQuery.hasData || togglePlaylistLike.isMutating) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
await togglePlaylistLike.mutate(isLikedQuery.data!);
|
||||
final confirmed = isUserPlaylist
|
||||
? await showPromptDialog(
|
||||
context: context,
|
||||
title: context.l10n.delete_playlist,
|
||||
message: context.l10n.delete_playlist_confirmation,
|
||||
)
|
||||
: true;
|
||||
if (confirmed) {
|
||||
await togglePlaylistLike.mutate(isLikedQuery.data!);
|
||||
return isUserPlaylist;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
child: const TrackView(),
|
||||
);
|
||||
|
@ -3,77 +3,99 @@
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"bn": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"ca": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"de": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"es": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"fa": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"fr": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"hi": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"it": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"ja": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"ne": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"nl": [
|
||||
@ -81,48 +103,62 @@
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"pl": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"pt": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"ru": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"tr": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"uk": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
],
|
||||
|
||||
"zh": [
|
||||
"start_a_radio",
|
||||
"how_to_start_radio",
|
||||
"replace_queue_question",
|
||||
"endless_playback"
|
||||
"endless_playback",
|
||||
"delete_playlist",
|
||||
"delete_playlist_confirmation"
|
||||
]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user