diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index a36bec8c..8b4f17b5 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -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 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; diff --git a/pubspec.lock b/pubspec.lock index ce908329..ef7fcd9b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index 72bf9398..7ecefa11 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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