A generic but configurable emoji picker for Flutter
  • Dart 98.4%
  • HTML 1%
  • Nix 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-23 20:29:31 -04:00
.widget_preview adjust padding 2026-09-16 16:10:04 -04:00
assets bump to 1.1.1+2 2026-09-17 12:13:38 -04:00
lib transition EmojiPicker to use a primary constructor 2026-10-23 20:29:31 -04:00
scripts minify emoji json 2026-09-17 09:48:34 -04:00
.envrc initial commit 2026-09-16 14:05:18 -04:00
.gitignore initial commit 2026-09-16 14:05:18 -04:00
.metadata initial commit 2026-09-16 14:05:18 -04:00
analysis_options.yaml initial commit 2026-09-16 14:05:18 -04:00
CHANGELOG.md release 2.0.1 2026-10-23 17:15:21 -04:00
flake.lock simplify flake 2026-10-23 16:59:44 -04:00
flake.nix simplify flake 2026-10-23 16:59:44 -04:00
LICENSE initial commit 2026-09-16 14:05:18 -04:00
pubspec.lock use a sliver-based approach 2026-09-17 11:13:36 -04:00
pubspec.yaml release 2.0.1 2026-10-23 17:15:21 -04:00
README.md release 2.0.1 2026-10-23 17:15:21 -04:00

A configurable emoji picker for Flutter. It defaults to Unicode emojis sourced from gemoji, but can be extended with custom emojis rendered as arbitrary Flutter widgets.

Features

  • Up-to-date Unicode emojis, sourced from gemoji
  • Custom emoji categories that can be prepended or appended to the default categories
  • Custom emojis can be rendered as arbitrary Flutter widgets, supporting images, GIFs, stickers, and more
  • Recent emojis can be easily implemented using prependCategories
  • Optional free-text selection
  • Designed for high performance using slivers and a custom scroll listener
  • Sleek Material 3 design

A screenshot of the emoji picker, showing a search bar, category selection, and two categories of emojis

Getting started

Add the package to your project with flutter pub get.

Usage

EmojiPicker is can be used in a variety of contexts, including bottom sheets, dialogs, or directly in your widget tree.

For example, using it as a bottom sheet:

showModalBottomSheet(
  isScrollControlled: true,
  context: context,
  builder: (context) => EmojiPicker(
    onSelection: (emoji) {
      Navigator.of(context).pop();
      message.sendReaction(emoji.value);
    },
  ),
);

Custom emojis

Custom categories can contain Emoji objects whose widget can be any Flutter widget. This makes it possible to use image-based emojis, GIFs, stickers, or other custom visual representations:

Emoji(
  widget: Image.network('https://example.com/blob.webp'),
  value: ':blob:',
  aliases: ['blob'],
  description: 'Blob',
  tags: ['custom', 'blob'],
  data: blobImage, // Optional, passed back to onSelection
)

To pick from only your own categories, like a sticker picker, turn off the default emojis:

EmojiPicker(
  prependCategories: stickerCategories,
  includeDefaultEmoji: false,
  itemSize: 96,
  searchHint: "Search stickers",
  onSelection: (sticker) => sendSticker(sticker.data as StickerImage),
)

Accepted Parameters

  • IList<EmojiCategory> prependCategories: Categories to prepend to the default emoji list
  • IList<EmojiCategory> appendCategories: Categories to append to the default emoji list
  • required FutureOr<void> Function(Emoji emoji) onSelection: Function to be called with the selected emoji
  • FutureOr<void> Function(String text)? onFreeText: If set, allows submitting the search text as is, calling this with it
  • bool includeDefaultEmoji = true: Whether to show the default emojis after prependCategories
  • double itemSize = 56: The width and height of each item in the grid
  • String searchHint = "Search emoji": Placeholder text for the search bar