From 863eca364fcca020d48a69685686faffec5d55bc Mon Sep 17 00:00:00 2001
From: LittleSheep <littlesheep.code@hotmail.com>
Date: Sun, 11 May 2025 22:12:58 +0800
Subject: [PATCH] :sparkles: Sticker packs actions
---
.../creators/stickers/pack_detail.dart | 69 +++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/lib/screens/creators/stickers/pack_detail.dart b/lib/screens/creators/stickers/pack_detail.dart
index a775be84..8e892acc 100644
--- a/lib/screens/creators/stickers/pack_detail.dart
+++ b/lib/screens/creators/stickers/pack_detail.dart
@@ -84,6 +84,11 @@ class StickerPackDetailScreen extends HookConsumerWidget {
});
},
),
+ _StickerPackActionMenu(
+ pubName: pubName,
+ packId: id,
+ iconShadow: Shadow(),
+ ),
const Gap(8),
],
),
@@ -226,6 +231,70 @@ class StickerPackDetailScreen extends HookConsumerWidget {
}
}
+class _StickerPackActionMenu extends HookConsumerWidget {
+ final String pubName;
+ final String packId;
+ final Shadow iconShadow;
+
+ const _StickerPackActionMenu({
+ required this.pubName,
+ required this.packId,
+ required this.iconShadow,
+ });
+
+ @override
+ Widget build(BuildContext context, WidgetRef ref) {
+ return PopupMenuButton(
+ icon: Icon(Icons.more_vert, shadows: [iconShadow]),
+ itemBuilder:
+ (context) => [
+ PopupMenuItem(
+ onTap: () {
+ context.router.push(
+ EditStickerPacksRoute(pubName: pubName, packId: packId),
+ );
+ },
+ child: Row(
+ children: [
+ Icon(
+ Icons.edit,
+ color: Theme.of(context).colorScheme.onSecondaryContainer,
+ ),
+ const Gap(12),
+ const Text('editStickerPack').tr(),
+ ],
+ ),
+ ),
+ PopupMenuItem(
+ child: Row(
+ children: [
+ const Icon(Icons.delete, color: Colors.red),
+ const Gap(12),
+ const Text(
+ 'deleteStickerPack',
+ style: TextStyle(color: Colors.red),
+ ).tr(),
+ ],
+ ),
+ onTap: () {
+ showConfirmAlert(
+ 'deleteStickerPackHint'.tr(),
+ 'deleteStickerPack'.tr(),
+ ).then((confirm) {
+ if (confirm) {
+ final client = ref.watch(apiClientProvider);
+ client.delete('/stickers/$packId');
+ ref.invalidate(stickerPacksProvider);
+ if (context.mounted) context.router.maybePop(true);
+ }
+ });
+ },
+ ),
+ ],
+ );
+ }
+}
+
@freezed
abstract class StickerWithPackQuery with _$StickerWithPackQuery {
const factory StickerWithPackQuery({