From 537f404fe022d59598bab108b809f80e3620dafc Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 23 Feb 2025 14:15:32 +0800 Subject: [PATCH] :sparkles: Delete sticker --- lib/screens/stickers/pack_detail.dart | 48 +++++++++++++++++++++------ 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/lib/screens/stickers/pack_detail.dart b/lib/screens/stickers/pack_detail.dart index 18eafa8..e3296f3 100644 --- a/lib/screens/stickers/pack_detail.dart +++ b/lib/screens/stickers/pack_detail.dart @@ -39,6 +39,29 @@ class _StickerPackScreenState extends State { bool _isBusy = false; + Future _deleteSticker(SnSticker sticker) async { + final confirm = await context.showConfirmDialog( + 'stickersDelete'.tr(args: [sticker.name]), + 'stickersDeleteDescription'.tr(), + ); + if (!confirm) return; + if (!mounted) return; + + try { + setState(() => _isBusy = true); + final sn = context.read(); + await sn.client.delete('/cgi/uc/stickers/${sticker.id}'); + if (!mounted) return; + context.showSnackbar('stickersDeleted'.tr()); + _fetchPack(); + } catch (err) { + if (!mounted) return; + context.showErrorDialog(err); + } finally { + setState(() => _isBusy = false); + } + } + @override void initState() { super.initState(); @@ -92,18 +115,23 @@ class _StickerPackScreenState extends State { crossAxisSpacing: 8, children: _pack!.stickers! .map( - (ele) => ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Container( - color: Theme.of(context) - .colorScheme - .surfaceContainerHigh, - child: AttachmentItem( - data: ele.attachment, - heroTag: 'sticker-pack-${ele.attachment.rid}', - fit: BoxFit.contain, + (ele) => GestureDetector( + child: ClipRRect( + borderRadius: BorderRadius.circular(8), + child: Container( + color: Theme.of(context) + .colorScheme + .surfaceContainerHigh, + child: AttachmentItem( + data: ele.attachment, + heroTag: 'sticker-pack-${ele.attachment.rid}', + fit: BoxFit.contain, + ), ), ), + onTap: () { + _deleteSticker(ele); + }, ), ) .toList(),