add emoji search and free text reactions
This commit is contained in:
parent
457299ad81
commit
759bee6a6c
1 changed files with 35 additions and 7 deletions
|
|
@ -19,6 +19,7 @@ final class const EmojiPicker({
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final selectedCategory = useState<int?>(null);
|
||||
final search = useState("");
|
||||
|
||||
final scrollController = useScrollController();
|
||||
final listController = useMemoized(ListController.new);
|
||||
|
|
@ -64,11 +65,22 @@ final class const EmojiPicker({
|
|||
return Column(
|
||||
spacing: 4,
|
||||
children: [
|
||||
SearchAnchor.bar(
|
||||
barHintText: "Search emoji",
|
||||
suggestionsBuilder: (context, controller) {
|
||||
return [];
|
||||
SearchBar(
|
||||
hintText: "Search emoji",
|
||||
leading: Icon(Icons.search),
|
||||
onChanged: (value) => search.value = value,
|
||||
trailing: [
|
||||
IconButton(
|
||||
onPressed: search.value.isEmpty
|
||||
? null
|
||||
: () async {
|
||||
Navigator.of(context).pop();
|
||||
|
||||
await onSelection(search.value);
|
||||
},
|
||||
icon: Icon(Icons.send),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 48,
|
||||
|
|
@ -110,6 +122,22 @@ final class const EmojiPicker({
|
|||
itemCount: combined.length,
|
||||
itemBuilder: (context, index) {
|
||||
final category = combined[index];
|
||||
final emojis = search.value.isEmpty
|
||||
? category.emojis
|
||||
: category.emojis
|
||||
.where(
|
||||
(emoji) =>
|
||||
emoji.aliases.join().contains(
|
||||
search.value,
|
||||
) ||
|
||||
emoji.description.contains(
|
||||
search.value,
|
||||
) ||
|
||||
emoji.tags.join().contains(
|
||||
search.value,
|
||||
),
|
||||
)
|
||||
.toIList();
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
|
@ -121,11 +149,11 @@ final class const EmojiPicker({
|
|||
maxCrossAxisExtent: 56,
|
||||
mainAxisExtent: 56,
|
||||
),
|
||||
itemCount: category.emojis.length,
|
||||
itemCount: emojis.length,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) {
|
||||
final emoji = category.emojis[index];
|
||||
final emoji = emojis[index];
|
||||
|
||||
return IconButton(
|
||||
padding: EdgeInsets.zero,
|
||||
|
|
|
|||
Loading…
Reference in a new issue