Flutter表情符号管理插件gugor_emoji的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter表情符号管理插件gugor_emoji的使用

gugor_emoji简介

gugor_emoji 是一个用于在 Flutter 应用程序中管理和选择表情符号的插件。它提供了丰富的功能,包括自定义视图、皮肤色调支持等。

关键特性

  • 轻量级包
  • 快速加载
  • 空安全
  • 完全可定制
  • Material Design 和 Cupertino 模式
  • 过滤无法显示的表情符号(仅限 Android)
  • 可选的最近使用的表情符号标签
  • 支持皮肤色调

开始使用

要开始使用 gugor_emoji 插件,你需要首先在你的项目中添加依赖项。你可以在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  gugor_emoji: ^x.x.x

然后运行 flutter pub get 来获取新的依赖项。

基本示例

下面是一个基本的使用示例,展示了如何在应用程序中集成 gugor_emoji 插件。

import 'dart:io';

import 'package:gugor_emoji/emoji_picker_flutter.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

/// 示例代码
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final TextEditingController _controller = TextEditingController();
  bool emojiShowing = false;

  _onEmojiSelected(Emoji emoji) {
    _controller
      ..text += emoji.emoji
      ..selection = TextSelection.fromPosition(
          TextPosition(offset: _controller.text.length));
  }

  _onBackspacePressed() {
    _controller
      ..text = _controller.text.characters.skipLast(1).toString()
      ..selection = TextSelection.fromPosition(
          TextPosition(offset: _controller.text.length));
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: const Text('表情符号选择器示例应用'),
        ),
        body: Column(
          children: [
            Expanded(child: Container()),
            Container(
                height: 66.0,
                color: Colors.blue,
                child: Row(
                  children: [
                    Material(
                      color: Colors.transparent,
                      child: IconButton(
                        onPressed: () {
                          setState(() {
                            emojiShowing = !emojiShowing;
                          });
                        },
                        icon: const Icon(
                          Icons.emoji_emotions,
                          color: Colors.white,
                        ),
                      ),
                    ),
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.symmetric(vertical: 8.0),
                        child: TextFormField(
                            controller: _controller,
                            style: const TextStyle(
                                fontSize: 20.0, color: Colors.black87),
                            decoration: InputDecoration(
                              hintText: '输入消息',
                              filled: true,
                              fillColor: Colors.white,
                              contentPadding: const EdgeInsets.only(
                                  left: 16.0,
                                  bottom: 8.0,
                                  top: 8.0,
                                  right: 16.0),
                              border: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(50.0),
                              ),
                            )),
                      ),
                    ),
                    Material(
                      color: Colors.transparent,
                      child: IconButton(
                          onPressed: () {
                            // 发送消息
                          },
                          icon: const Icon(
                            Icons.send,
                            color: Colors.white,
                          )),
                    )
                  ],
                )),
            Offstage(
              offstage: !emojiShowing,
              child: SizedBox(
                height: 250,
                child: EmojiPicker(
                    onEmojiSelected: (Category category, Emoji emoji) {
                      _onEmojiSelected(emoji);
                    },
                    onBackspacePressed: _onBackspacePressed,
                    config: Config(
                        columns: 7,
                        // 修复问题:https://github.com/flutter/flutter/issues/28894
                        emojiSizeMax: 32 * (Platform.isIOS ? 1.30 : 1.0),
                        verticalSpacing: 0,
                        horizontalSpacing: 0,
                        initCategory: Category.RECENT,
                        bgColor: const Color(0xFFF2F2F2),
                        indicatorColor: Colors.blue,
                        iconColor: Colors.grey,
                        iconColorSelected: Colors.blue,
                        progressIndicatorColor: Colors.blue,
                        backspaceColor: Colors.blue,
                        skinToneDialogBgColor: Colors.white,
                        skinToneIndicatorColor: Colors.grey,
                        enableSkinTones: true,
                        showRecentsTab: true,
                        recentsLimit: 28,
                        noRecentsText: '无最近使用的表情符号',
                        noRecentsStyle: const TextStyle(
                            fontSize: 20, color: Colors.black26),
                        tabIndicatorAnimDuration: kTabScrollDuration,
                        categoryIcons: const CategoryIcons(),
                        buttonMode: ButtonMode.MATERIAL)),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

配置选项

gugor_emoji 提供了多种配置选项,以满足不同的需求。以下是一些常用的配置选项及其默认值:

属性 描述 默认值
columns 每行的表情符号数量 7
emojiSizeMax 表情符号的最大宽度和高度 32.0
verticalSpacing 表情符号之间的垂直间距 0
horizontalSpacing 表情符号之间的水平间距 0
initCategory 初始选中的类别 Category.RECENT
bgColor 控件的背景颜色 Color(0xFFF2F2F2)
indicatorColor 类别指示器的颜色 Colors.blue
iconColor 类别图标颜色 Colors.grey
iconColorSelected 选中时类别图标的颜色 Colors.blue
progressIndicatorColor 加载指示器的颜色 Colors.blue
backspaceColor 返回键按钮的颜色 Colors.blue
skinToneDialogBgColor 皮肤色调对话框的背景颜色 Colors.white
skinToneIndicatorColor 多个皮肤色调表情符号旁边的小三角颜色 Colors.grey
enableSkinTones 启用选择某些表情符号的皮肤色调功能 true
showRecentsTab 显示额外的最近使用表情符号标签 true
recentsLimit 最近使用的表情符号保存限制 28
noRecentsText 如果没有最近的表情符号要显示的文本 “无最近使用的表情符号”
noRecentsStyle [noRecentsText] 的文本样式 TextStyle(fontSize: 20, color: Colors.black26)
tabIndicatorAnimDuration 选项卡指示器动画到下一个类别的持续时间 Duration(milliseconds: 300)
categoryIcons 确定每个类别的显示图标。可以通过构造函数设置 CategoryIcons()
buttonMode 选择 Material 或 Cupertino 按钮样式 ButtonMode.MATERIAL

返回键

你可以通过添加回调方法 onBackspacePressed: () { }EmojiPicker 小部件来添加返回键。这将使用户更容易删除已添加的表情符号,而无需显示键盘。请参阅示例以了解有关用法的更多详细信息。

自定义视图

通过设置 customWidget 属性,可以完全自定义视图。如果 Config 中的属性不够,你可以继承自 EmojiPickerBuilder(推荐但不是必需的)以进行进一步调整。

class CustomView extends EmojiPickerBuilder {
  CustomView(Config config, EmojiViewState state) : super(config, state);

  @override
  _CustomViewState createState() => _CustomViewState();
}

class _CustomViewState extends State<CustomView> {
  @override
  Widget build(BuildContext context) {
    // TODO: 实现构建
    // 访问 widget.config 和 widget.state
    return Container();
  }
}

EmojiPicker(
  onEmojiSelected: (Category category, Emoji emoji) { /* ...*/ },
  config: Config( /* ...*/ ),
  customWidget: (config, state) => CustomView(config, state),
)

使用 EmojiPickerUtils 扩展功能

你可以使用 EmojiPickerUtils 类来扩展 gugor_emoji 的功能。

// 获取最近使用的表情符号
final recentEmojis = await EmojiPickerUtils().getRecentEmojis();

// 根据关键词搜索相关表情符号
final filterEmojiEntities = await EmojiPickerUtils().searchEmoji("face");

// 将表情符号添加到最近使用的列表或增加其计数
final newRecentEmojis = await EmojiPickerUtils().addEmojiToRecentlyUsed(key: key, emoji: emoji);
// 重要:需要相同的 key 实例,类型为 GlobalKey<EmojiPickerState>,以便正常工作

更多关于Flutter表情符号管理插件gugor_emoji的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter表情符号管理插件gugor_emoji的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用gugor_emoji插件来管理表情符号的示例代码。gugor_emoji是一个流行的Flutter插件,用于在应用中集成和管理表情符号。

首先,确保你已经在pubspec.yaml文件中添加了gugor_emoji依赖:

dependencies:
  flutter:
    sdk: flutter
  gugor_emoji: ^latest_version  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中使用gugor_emoji插件。以下是一个简单的示例,展示如何在应用中显示表情符号选择器并处理选中的表情符号:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Emoji Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: EmojiScreen(),
    );
  }
}

class EmojiScreen extends StatefulWidget {
  @override
  _EmojiScreenState createState() => _EmojiScreenState();
}

class _EmojiScreenState extends State<EmojiScreen> {
  String selectedEmoji = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Emoji Picker Example'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'Selected Emoji: $selectedEmoji',
            style: TextStyle(fontSize: 24),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              showEmojiPicker(context, onEmojiSelected: (emoji) {
                setState(() {
                  selectedEmoji = emoji;
                });
              });
            },
            child: Text('Select Emoji'),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 添加依赖:在pubspec.yaml文件中添加了gugor_emoji依赖。
  2. 创建主应用:定义了一个MyApp类作为应用的入口。
  3. 创建主屏幕:定义了一个EmojiScreen类,它包含一个文本显示选中的表情符号和一个按钮来打开表情符号选择器。
  4. 显示选中的表情符号:使用Text小部件显示当前选中的表情符号。
  5. 打开表情符号选择器:使用showEmojiPicker函数打开表情符号选择器,并在用户选择表情符号时更新状态。

这个示例展示了如何使用gugor_emoji插件在Flutter应用中集成表情符号选择器,并处理用户选择的结果。你可以根据需要进一步自定义和扩展这个示例。

回到顶部