Adding Emoji Hints

Create data.dart to hold the emoji data

Create a new file emoji_grid.dart

import 'package:clipboard/clipboard.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

import 'data.dart';

class EmojiGrid extends StatefulWidget {
  const EmojiGrid({super.key});

  @override
  State<EmojiGrid> createState() => _EmojiGridState();
}

class _EmojiGridState extends State<EmojiGrid> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      scrollDirection: Axis.horizontal,
      itemCount: emojis.length,
      itemBuilder: (context, index) {
        return Padding(
          padding: const EdgeInsets.all(8.0),
          child: EmojiTile(
            emoji: emojis[index],
          ),
        );
      },
    );
  }
}

class EmojiTile extends StatefulWidget {
  final String emoji;

  const EmojiTile({required this.emoji, super.key});

  @override
  State<EmojiTile> createState() => _EmojiTileState();
}

class _EmojiTileState extends State<EmojiTile> {
  @override
  Widget build(BuildContext context) {
    bool isHovered = false;
    return MouseRegion(
      onEnter: (_) {
        setState(() {
          isHovered = true;
        });
      },
      onExit: (_) {
        setState(() {
          isHovered = false;
        });
      },
      child: Container(
        decoration: BoxDecoration(
          color: Colors.orangeAccent,
          borderRadius: BorderRadius.circular(10),
        ),
        child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
          Padding(
            padding: const EdgeInsets.only(top: 15, left: 5),
            child: Center(
              child: Text(
                widget.emoji,
                style: const TextStyle(fontSize: 20),
              ),
            ),
          ),
          IconButton(
            color: Colors.redAccent,
            icon: Icon(
              FontAwesomeIcons.copy,
              color: isHovered ? Colors.white : IconTheme.of(context).color,
              size: 15,
            ),
            onPressed: () async {
              FlutterClipboard.copy(widget.emoji).then(
                (value) {
                  return ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(
                      content: Text('Text Copied'),
                    ),
                  );
                },
              );
            },
          ),
        ]),
      ),
    );
  }
}

InputDecoration textFieldDecoration(BuildContext context, String hintText) =>
    InputDecoration(
      contentPadding: const EdgeInsets.all(5),
      hintText: hintText,
      border: OutlineInputBorder(
        borderRadius: const BorderRadius.all(
          Radius.circular(14),
        ),
        borderSide: BorderSide(
          color: Theme.of(context).colorScheme.secondary,
        ),
      ),
      focusedBorder: OutlineInputBorder(
        borderRadius: const BorderRadius.all(
          Radius.circular(14),
        ),
        borderSide: BorderSide(
          color: Theme.of(context).colorScheme.secondary,
        ),
      ),
    );

We need 2 packages clipboard and font_awesome_flutter in pubspec.yaml

clipboard: ^0.1.3
font_awesome_flutter: ^10.7.0

Add the grid to chat_screen.dart above ChatWidget

const SizedBox(
              height: 80,
              child: EmojiGrid(),
            ),

Last updated