diff --git a/lib/widgets/composer/composer.dart b/lib/widgets/composer/composer.dart index eacfad8..d8db045 100644 --- a/lib/widgets/composer/composer.dart +++ b/lib/widgets/composer/composer.dart @@ -2,7 +2,7 @@ import "dart:io"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:file_selector/file_selector.dart"; -import "package:material_emoji_picker/material_emoji_picker.dart"; +import "package:nexus/widgets/emoji_picker.dart"; import "package:material_ui/material_ui.dart"; import "package:flutter/services.dart"; import "package:flutter_hooks/flutter_hooks.dart"; diff --git a/lib/widgets/emoji_picker.dart b/lib/widgets/emoji_picker.dart new file mode 100644 index 0000000..144d9bc --- /dev/null +++ b/lib/widgets/emoji_picker.dart @@ -0,0 +1,53 @@ +import "dart:async"; + +import "package:collection/collection.dart"; +import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:hooks_riverpod/hooks_riverpod.dart"; +import "package:material_emoji_picker/material_emoji_picker.dart" as upstream; +import "package:material_ui/material_ui.dart"; +import "package:nexus/controllers/account_data.dart"; +import "package:nexus/helpers/extensions/better_when.dart"; + +class const EmojiPicker({ + required final FutureOr Function(String value) onSelection, + final bool allowFreeText = false, + super.key, +}) extends ConsumerWidget { + @override + Widget build(BuildContext context, WidgetRef ref) => ref + .watch(upstream.EmojiController.provider) + .betterWhen( + data: (categories) => upstream.EmojiPicker( + onSelection: (value) async { + // + await onSelection(value); + }, + allowFreeText: allowFreeText, + prependCategories: .new([ + .new( + icon: Icon(Icons.history), + name: "Recent", + emojis: .new( + ref + .watch( + AccountDataController.provider.select( + (value) => value.recentEmoji + .map((entry) => entry.emoji) + .toIList(), + ), + ) + .map( + (emoji) => categories + .map((element) => element.emojis) + .flattened + .firstWhereOrNull( + (element) => element.value == emoji, + ), + ) + .nonNulls, + ), + ), + ]), + ), + ); +} diff --git a/lib/widgets/room_chat.dart b/lib/widgets/room_chat.dart index 121428b..6161cde 100644 --- a/lib/widgets/room_chat.dart +++ b/lib/widgets/room_chat.dart @@ -17,7 +17,7 @@ import "package:nexus/models/content/message.dart"; import "package:nexus/models/event.dart"; import "package:nexus/models/relation_type.dart"; import "package:nexus/widgets/composer/composer.dart"; -import "package:material_emoji_picker/material_emoji_picker.dart"; +import "package:nexus/widgets/emoji_picker.dart"; import "package:nexus/widgets/pinned_events_drawer.dart"; import "package:nexus/widgets/renderers/event.dart"; import "package:nexus/widgets/member_list.dart"; diff --git a/pubspec.lock b/pubspec.lock index b3102b9..d081bdc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -898,10 +898,10 @@ packages: dependency: "direct main" description: name: material_emoji_picker - sha256: "1547195a419134cf0b2396d119dc873589804f461424917b1b61a0966bfb7e5a" + sha256: bb1d5a467e2f83fd13dc83bd5a3c827bbfc525041921ed74a1d85b905fdc77e8 url: "https://pub.dev" source: hosted - version: "1.0.0+1" + version: "1.0.2" material_ui: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 9f3b2c5..a3e964a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -80,7 +80,7 @@ dependencies: unifiedpush_storage_shared_preferences: 1.0.0 flutter_local_notifications: 22.3.0 flutter_local_notifications_linux: 8.0.1 - material_emoji_picker: 1.0.0+1 + material_emoji_picker: 1.0.2 dev_dependencies: build_runner: 2.16.1