feat: Set usage of custom emojis and stickers

This commit is contained in:
krille-chan 2025-11-20 18:55:19 +01:00
commit 18d69ae608
No known key found for this signature in database
3 changed files with 102 additions and 43 deletions

View file

@ -3454,5 +3454,7 @@
"thread": "Thread", "thread": "Thread",
"backToMainChat": "Back to main chat", "backToMainChat": "Back to main chat",
"saveChanges": "Save changes", "saveChanges": "Save changes",
"createSticker": "Create sticker or emoji" "createSticker": "Create sticker or emoji",
"useAsSticker": "Use as sticker",
"useAsEmoji": "Use as emoji"
} }

View file

@ -124,6 +124,15 @@ class EmotesSettingsController extends State<EmotesSettings> {
showSave = true; showSave = true;
}); });
void toggleUsage(String imageCode, ImagePackUsage usage) {
setState(() {
final usages =
pack!.images[imageCode]!.usage ??= List.from(ImagePackUsage.values);
if (!usages.remove(usage)) usages.add(usage);
showSave = true;
});
}
void submitImageAction( void submitImageAction(
String oldImageCode, String oldImageCode,
String imageCode, String imageCode,

View file

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:matrix/matrix_api_lite/model/events/image_pack_content.dart';
import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart';
@ -116,7 +118,10 @@ class EmotesSettingsView extends StatelessWidget {
final useShortCuts = final useShortCuts =
(PlatformInfos.isWeb || PlatformInfos.isDesktop); (PlatformInfos.isWeb || PlatformInfos.isDesktop);
return ListTile( return ListTile(
title: Shortcuts( title: Row(
children: [
Expanded(
child: Shortcuts(
shortcuts: !useShortCuts shortcuts: !useShortCuts
? {} ? {}
: { : {
@ -158,7 +163,8 @@ class EmotesSettingsView extends StatelessWidget {
), ),
), ),
), ),
onSubmitted: (s) => controller.submitImageAction( onSubmitted: (s) =>
controller.submitImageAction(
imageCode, imageCode,
s, s,
image, image,
@ -167,6 +173,48 @@ class EmotesSettingsView extends StatelessWidget {
), ),
), ),
), ),
),
PopupMenuButton<ImagePackUsage>(
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),
),
],
),
leading: _EmoteImage(image.url), leading: _EmoteImage(image.url),
trailing: controller.readonly trailing: controller.readonly
? null ? null