From ed945311d94d9d45e2301106f89242f0540b6cc2 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Thu, 20 Nov 2025 19:17:04 +0100 Subject: [PATCH] chore: Improve sticker editor UX --- .../settings_emotes/settings_emotes.dart | 3 +- .../settings_emotes/settings_emotes_view.dart | 86 +++++++++---------- 2 files changed, 43 insertions(+), 46 deletions(-) diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index 4f6d92c5d..82b69bb52 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -175,8 +175,7 @@ class EmotesSettingsController extends State { ?.tryGetMap(stateKey ?? '') != null; - bool get readonly => - room == null ? false : !(room!.canSendEvent('im.ponies.room_emotes')); + bool get readonly => room?.canSendEvent('im.ponies.room_emotes') ?? false; void resetAction() { setState(() { diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart index 34fb50ccd..d00fd8b4f 100644 --- a/lib/pages/settings_emotes/settings_emotes_view.dart +++ b/lib/pages/settings_emotes/settings_emotes_view.dart @@ -76,7 +76,7 @@ class EmotesSettingsView extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - if (!controller.readonly) + if (!controller.readonly) ...[ Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton.icon( @@ -85,8 +85,8 @@ class EmotesSettingsView extends StatelessWidget { label: Text(L10n.of(context).createSticker), ), ), - if (!controller.readonly || controller.room != null) const Divider(), + ], if (controller.room != null && imageKeys.isNotEmpty) SwitchListTile.adaptive( title: Text(L10n.of(context).enableEmotesGlobally), @@ -108,11 +108,8 @@ class EmotesSettingsView extends StatelessWidget { physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext context, int i) => const SizedBox.shrink(), - itemCount: imageKeys.length + 1, + itemCount: imageKeys.length, itemBuilder: (BuildContext context, int i) { - if (i >= imageKeys.length) { - return Container(height: 70); - } final imageCode = imageKeys[i]; final image = controller.pack!.images[imageCode]!; final textEditingController = TextEditingController(); @@ -176,45 +173,46 @@ class EmotesSettingsView extends StatelessWidget { ), ), ), - PopupMenuButton( - onSelected: (usage) => controller.toggleUsage( - imageCode, - usage, + if (!controller.readonly) + PopupMenuButton( + onSelected: (usage) => controller.toggleUsage( + imageCode, + usage, + ), + itemBuilder: (context) => [ + PopupMenuItem( + value: ImagePackUsage.sticker, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (image.usage?.contains( + ImagePackUsage.sticker, + ) ?? + true) + const Icon(Icons.check_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).useAsSticker), + ], + ), + ), + PopupMenuItem( + value: ImagePackUsage.emoticon, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (image.usage?.contains( + ImagePackUsage.emoticon, + ) ?? + true) + const Icon(Icons.check_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).useAsEmoji), + ], + ), + ), + ], + icon: const Icon(Icons.edit_outlined), ), - itemBuilder: (context) => [ - PopupMenuItem( - value: ImagePackUsage.sticker, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (image.usage?.contains( - ImagePackUsage.sticker, - ) ?? - true) - const Icon(Icons.check_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).useAsSticker), - ], - ), - ), - PopupMenuItem( - value: ImagePackUsage.emoticon, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (image.usage?.contains( - ImagePackUsage.emoticon, - ) ?? - true) - const Icon(Icons.check_outlined), - const SizedBox(width: 12), - Text(L10n.of(context).useAsEmoji), - ], - ), - ), - ], - icon: const Icon(Icons.edit_outlined), - ), ], ), leading: _EmoteImage(image.url),