emoji_utils 0.0.1 copy "emoji_utils: ^0.0.1" to clipboard
emoji_utils: ^0.0.1 copied to clipboard

A lightweight Dart utility for accurate single emoji detection. Handles ZWJ sequences, skin tone modifiers, variation selectors, flags, and all modern Unicode emoji ranges.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:emoji_utils/emoji_utils.dart';

void main() {
  runApp(const EmojiUtilsExampleApp());
}

class EmojiUtilsExampleApp extends StatelessWidget {
  const EmojiUtilsExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Emoji Utils Example',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorSchemeSeed: Colors.deepPurple,
        useMaterial3: true,
      ),
      home: const ChatScreen(),
    );
  }
}

class ChatScreen extends StatelessWidget {
  const ChatScreen({super.key});

  @override
  Widget build(BuildContext context) {
    // Sample messages to demonstrate emoji detection
    final messages = [
      'Hello! 👋',
      '❤️',
      'How are you?',
      '😂',
      'Great to hear!',
      '🎉',
      'Good morning 🌅',
      '🇹🇷',
      '👋🏽',
      'See you later!',
    ];

    return Scaffold(
      appBar: AppBar(
        title: const Text('Emoji Utils Demo'),
        centerTitle: true,
      ),
      body: ListView.builder(
        padding: const EdgeInsets.all(16),
        itemCount: messages.length,
        itemBuilder: (context, index) {
          final message = messages[index];
          final isSingle = EmojiUtils.isSingleEmoji(message);
          final isMe = index.isEven;

          return _ChatBubble(
            message: message,
            isSingleEmoji: isSingle,
            isMe: isMe,
          );
        },
      ),
    );
  }
}

class _ChatBubble extends StatelessWidget {
  const _ChatBubble({
    required this.message,
    required this.isSingleEmoji,
    required this.isMe,
  });

  final String message;
  final bool isSingleEmoji;
  final bool isMe;

  @override
  Widget build(BuildContext context) {
    final colorScheme = Theme.of(context).colorScheme;

    // If the message is a single emoji, display it large without a bubble
    if (isSingleEmoji) {
      return Align(
        alignment: isMe ? Alignment.centerRight : Alignment.centerLeft,
        child: Padding(
          padding: const EdgeInsets.symmetric(vertical: 4),
          child: Text(
            message,
            style: const TextStyle(fontSize: 56),
          ),
        ),
      );
    }

    // Otherwise, display inside a chat bubble
    return Align(
      alignment: isMe ? Alignment.centerRight : Alignment.centerLeft,
      child: Container(
        margin: const EdgeInsets.symmetric(vertical: 4),
        padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
        decoration: BoxDecoration(
          color: isMe
              ? colorScheme.primaryContainer
              : colorScheme.surfaceContainerHighest,
          borderRadius: BorderRadius.circular(20),
        ),
        child: Text(
          message,
          style: TextStyle(
            fontSize: 16,
            color: isMe
                ? colorScheme.onPrimaryContainer
                : colorScheme.onSurface,
          ),
        ),
      ),
    );
  }
}
2
likes
160
points
102
downloads

Documentation

API reference

Publisher

verified publisherspeakblend.com

Weekly Downloads

A lightweight Dart utility for accurate single emoji detection. Handles ZWJ sequences, skin tone modifiers, variation selectors, flags, and all modern Unicode emoji ranges.

Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on emoji_utils