Flutter表情选择器插件emoji_picker_flutter的使用
Flutter表情选择器插件emoji_picker_flutter的使用
插件介绍
emoji_picker_flutter 是一个用于Flutter项目的表情选择器插件,具有以下特点:
- 轻量级包:资源占用少。
 - 快速加载:启动和切换表情类别时响应迅速。
 - 空安全(Null-safety):支持Flutter的空安全特性。
 - 完全可定制:可以自定义表情视图、皮肤色调配置等。
 - Material Design 和 Cupertino 模式:兼容两种设计风格。
 - 过滤无法显示的表情(仅限Android):确保所有表情都能正确显示。
 - 最近使用表情选项:提供最近使用表情的标签页。
 - 肤色支持:部分表情可以选择不同的肤色。
 - 自定义字体支持:允许使用自定义字体来显示表情。
 - 搜索功能:内置表情搜索功能。
 - 多语言支持:支持8种语言。
 

快速开始
安装
在 pubspec.yaml 文件中添加依赖:
dependencies:
  emoji_picker_flutter: ^latest_version
示例代码
下面是一个完整的示例代码,展示了如何在Flutter项目中集成并使用 emoji_picker_flutter 插件:
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
import 'package:flutter/foundation.dart' as foundation;
import 'package:flutter/material.dart';
void main() {
  runApp(const MyApp());
}
/// Example for EmojiPicker
class MyApp extends StatefulWidget {
  const MyApp({super.key});
  @override
  MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
  final _controller = TextEditingController();
  final _scrollController = ScrollController();
  bool _emojiShowing = false;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: const Text('Emoji Picker Example App'),
        ),
        body: SafeArea(
          child: Column(
            children: [
              Expanded(
                child: Center(
                  child: ValueListenableBuilder(
                    valueListenable: _controller,
                    builder: (context, text, child) {
                      return Text(
                        _controller.text,
                      );
                    },
                  ),
                ),
              ),
              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: TextField(
                              controller: _controller,
                              scrollController: _scrollController,
                              style: const TextStyle(
                                fontSize: 20.0,
                                color: Colors.black87,
                              ),
                              maxLines: 1,
                              decoration: InputDecoration(
                                hintText: 'Type a message',
                                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: () {
                              // send message
                            },
                            icon: const Icon(
                              Icons.send,
                              color: Colors.white,
                            )),
                      )
                    ],
                  )),
              Offstage(
                offstage: !_emojiShowing,
                child: EmojiPicker(
                  textEditingController: _controller,
                  scrollController: _scrollController,
                  config: Config(
                    height: 256,
                    checkPlatformCompatibility: true,
                    viewOrderConfig: const ViewOrderConfig(),
                    emojiViewConfig: EmojiViewConfig(
                      // Issue: https://github.com/flutter/flutter/issues/28894
                      emojiSizeMax: 28 *
                          (foundation.defaultTargetPlatform ==
                                  TargetPlatform.iOS
                              ? 1.2
                              : 1.0),
                    ),
                    skinToneConfig: const SkinToneConfig(),
                    categoryViewConfig: const CategoryViewConfig(),
                    bottomActionBarConfig: const BottomActionBarConfig(),
                    searchViewConfig: const SearchViewConfig(),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}
关键参数说明
onEmojiSelected: 当用户选择表情时触发的回调函数。onBackspacePressed: 当用户点击退格按钮时触发的回调函数。textEditingController: 连接到输入框的TextEditingController实例。config: 表情选择器的配置项,包括高度、背景颜色、平台兼容性检查等。
配置项详解
| 属性 | 描述 | 默认值 | 
|---|---|---|
| height | 表情选择器的高度 | 256 | 
| viewOrderConfig | 类别视图、表情视图和底部栏的顺序配置 | const ViewOrderConfig() | 
| checkPlatformCompatibility | 是否过滤掉平台无法渲染的表情(仅限Android) | true | 
| emojiSet | 自定义表情集,基于库提供的 defaultEmojiSet 构建 | 
null | 
| emojiTextStyle | 应用到单个表情图标上的文本样式,可用于定义自定义表情字体 | null | 
| customBackspaceIcon | 自定义退格按钮图标 | null | 
| customSearchIcon | 自定义搜索按钮图标 | null | 
| emojiViewConfig | 表情视图配置 | const EmojiViewConfig() | 
| skinToneConfig | 皮肤色调配置 | const SkinToneConfig | 
| categoryViewConfig | 类别视图配置 | const CategoryViewConfig | 
| bottomActionBarConfig | 底部操作栏配置 | const BottomActionBarConfig() | 
| searchViewConfig | 搜索视图配置 | const SearchViewConfig | 
扩展使用
使用 EmojiPickerUtils
EmojiPickerUtils 提供了一些扩展功能,例如获取最近使用的表情、根据关键词搜索表情、设置表情样式等。具体用法如下:
// 获取最近使用的表情
final recentEmojis = await EmojiPickerUtils().getRecentEmojis();
// 根据关键词搜索相关表情
final filterEmojiEntities = await EmojiPickerUtils().searchEmoji("face", defaultEmojiSet);
// 将表情添加到最近使用列表或增加其计数
final newRecentEmojis = await EmojiPickerUtils().addEmojiToRecentlyUsed(key: key, emoji: emoji);
// 设置表情样式
final textSpans = EmojiPickerUtils().setEmojiTextStyle('text', emojiStyle: style);
// 清除最近使用表情列表
EmojiPickerUtils().clearRecentEmojis(key: key);
多语言支持
emoji_picker_flutter 支持多种语言,默认支持的语言有:en、de、es、fr、hi、it、ja、pt、ru、zh。你可以通过设置 locale 参数来选择语言:
Config(
  locale: const Locale("ja"),
)
如果你需要支持更多语言,可以通过创建新的表情集文件并翻译内容来实现。
自定义视图
如果你想进一步自定义表情选择器的外观,可以通过继承 EmojiPickerView 或设置 customWidget 来实现。
class CustomView extends EmojiPickerView {
  CustomView(Config config, EmojiViewState state, VoidCallback showSearchBar,
      {super.key})
      : super(
          config,
          state,
          showSearchBar,
        );
  @override
  _CustomViewState createState() => _CustomViewState();
}
class _CustomViewState extends State<CustomView> {
  @override
  Widget build(BuildContext context) {
    // 自定义构建逻辑
    return Container();
  }
}
EmojiPicker(
  onEmojiSelected: (category, emoji) {/* ...*/},
  config: Config(/* ...*/),
  customWidget: (config, state, showSearchView) => CustomView(
    config,
    state,
    showSearchView,
  ),
)
贡献与反馈
欢迎贡献代码或提出改进建议!如果有任何问题或需求,请在GitHub上提交Issue。
以上就是关于 emoji_picker_flutter 插件的详细介绍和使用方法,希望对你有所帮助!
更多关于Flutter表情选择器插件emoji_picker_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表情选择器插件emoji_picker_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用emoji_picker_flutter插件的代码示例。这个插件允许你在Flutter应用中集成一个表情选择器。
步骤 1: 添加依赖
首先,在你的pubspec.yaml文件中添加emoji_picker_flutter依赖:
dependencies:
  flutter:
    sdk: flutter
  emoji_picker_flutter: ^0.7.0  # 请检查最新版本号
步骤 2: 运行 Flutter Pub Get
保存pubspec.yaml文件后,在终端中运行以下命令来获取依赖:
flutter pub get
步骤 3: 使用 Emoji Picker
接下来,在你的Flutter应用中实现表情选择器。以下是一个简单的示例,展示了如何在一个按钮点击事件中显示表情选择器,并将选中的表情显示在TextWidget中。
import 'package:flutter/material.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Emoji Picker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  String selectedEmoji = '';
  void _pickEmoji() {
    showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text('Pick an Emoji'),
          content: SingleChildScrollView(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                EmojiPicker(
                  onEmojiSelected: (emoji, category) {
                    setState(() {
                      selectedEmoji = emoji.emoji;
                    });
                    Navigator.of(context).pop();
                  },
                  initCategory: Category.recent,
                  emojiSize: 30.0,
                ),
              ],
            ),
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Cancel'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Emoji Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Emoji: $selectedEmoji',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickEmoji,
              child: Text('Pick Emoji'),
            ),
          ],
        ),
      ),
    );
  }
}
解释
- 添加依赖:在
pubspec.yaml文件中添加emoji_picker_flutter依赖。 - 运行
flutter pub get:确保依赖被正确下载和安装。 - 使用Emoji Picker:
- 创建一个按钮,点击时调用
_pickEmoji方法。 _pickEmoji方法使用showDialog显示一个包含EmojiPicker的对话框。EmojiPicker的onEmojiSelected回调用于处理选中的表情,并更新状态。- 使用
setState方法更新UI以显示选中的表情。 
 - 创建一个按钮,点击时调用
 
这个示例展示了如何使用emoji_picker_flutter插件来在Flutter应用中集成一个表情选择器,并处理用户选择的表情。你可以根据需要进一步自定义和扩展这个示例。
        
      
            
            
            
