1
0
Fork 0
forked from Nexus/nexus

add support for sending emojis through a custom picker

This commit is contained in:
Henry Hiles 2026-04-12 16:29:03 -04:00
commit e16a780fa3
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
3 changed files with 71 additions and 0 deletions

View file

@ -1,3 +1,5 @@
import "package:emoji_text_field/emoji_text_field.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
@ -6,6 +8,7 @@ import "package:flutter_hooks/flutter_hooks.dart";
import "package:flyer_chat_file_message/flyer_chat_file_message.dart";
import "package:flyer_chat_system_message/flyer_chat_system_message.dart";
import "package:hooks_riverpod/hooks_riverpod.dart";
import "package:nexus/controllers/account_data_controller.dart";
import "package:nexus/controllers/client_controller.dart";
import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/power_level_controller.dart";
@ -84,6 +87,62 @@ class RoomChat extends HookConsumerWidget {
List<PopupMenuEntry> getMessageOptions(Message message) {
final isSentByMe = message.authorId == userId;
return [
PopupMenuItem(
child: Row(
children: [
...{
...ref.watch(
AccountDataController.provider.select(
(value) => IList(
value["m.recent_emoji"]?.content["recent_emoji"] ??
[],
).map((entry) => entry["emoji"]),
),
),
"👍",
"🤣",
"😭",
"🤔",
}
.toIList()
.sublist(0, 4)
.map(
(emoji) => IconButton(
onPressed: () async {
Navigator.of(context).pop();
await notifier
.sendReaction(emoji, message)
.onError(showError);
},
icon: Text(emoji),
),
),
IconButton(
onPressed: () {
Navigator.of(context).pop();
final controller = TextEditingController();
showBottomSheet(
context: context,
builder: (context) => EmojiKeyboardView(
config: EmojiViewConfig(
backgroundColor: theme.colorScheme.surfaceContainer,
height: 600,
),
textController: controller
..addListener(() async {
Navigator.of(context).pop();
await notifier
.sendReaction(controller.text, message)
.onError(showError);
}),
),
);
},
icon: Icon(Icons.emoji_emotions),
),
],
),
),
PopupMenuItem(
onTap: () {
relatedMessage.value = message;

View file

@ -354,6 +354,15 @@ packages:
url: "https://github.com/hasali19/flutter_dynamic_system_colors"
source: git
version: "1.8.0"
emoji_text_field:
dependency: "direct main"
description:
path: "."
ref: HEAD
resolved-ref: "0e90703a6e876939be70bd1816c49cf14474de61"
url: "https://github.com/Henry-Hiles/emoji_text_field"
source: git
version: "1.0.0"
encrypt:
dependency: transitive
description:

View file

@ -58,6 +58,9 @@ dependencies:
timeago: ^3.7.1
http: ^1.6.0
flutter_linkify: ^6.0.0
emoji_text_field:
git:
url: https://github.com/Henry-Hiles/emoji_text_field
dev_dependencies:
build_runner: ^2.4.11