Flutter表情符号转换插件xen_emojify的使用

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

Flutter表情符号转换插件xen_emojify的使用

xen_emojify 是一个功能强大的 Flutter 包,旨在通过提供类似 Facebook 的表情反应功能来增强用户体验。利用 Lottie(一个动态动画库)的力量,该包提供了流畅且视觉效果出色的动画,确保了愉悦的用户体验。

借助 xen_emojify,你可以轻松地将可自定义的表情反应小部件集成到你的 Flutter 应用程序中,为用户提供诸如点赞、喜爱、大笑等丰富的表达方式。此小部件高度可定制,允许你调整其大小、颜色方案和动画速度以适应应用的设计和品牌。

无论你是在开发社交媒体平台、内容共享应用还是其他需要用户反馈的应用程序,xen_emojify 都能提供一种无缝实现表情反应功能的解决方案。通过 xen_emojify 来提升你的用户参与度,并为你的应用程序增添个性。

特性

  • 显示点赞、喜爱、大笑等表情图标。
  • 可自定义大小、颜色和动画速度。
  • 支持 onTap 回调以处理用户交互。

免费的 Lottie 动画

开始使用

在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  xen_emojify: current_version

导入 xen_emojify 包

import 'package:xen_emojify/xen_emojify.dart';

示例代码

示例代码文件

// BSD License. Copyright © Kiran Paudel. All rights reserved

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

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'XenEmojify Example',
      home: XenEmojifyExample(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const Text('react', style: TextStyle(fontWeight: FontWeight.bold));
  }
}

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

  [@override](/user/override)
  State<XenEmojifyExample> createState() => _XenEmojifyExampleState();
}

class _XenEmojifyExampleState extends State<XenEmojifyExample> {
  XenEmoji initialEmoji = const XenEmoji(
    'https://fonts.gstatic.com/s/e/notoemoji/latest/1f60d/lottie.json',
    label: 'heart eyes',
    lottieID: '1f60d',
  );

  [@override](/user/override)
  Widget build(BuildContext context) {
    final lotties = [
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f60d/lottie.json',
        label: 'Heart Eyes',
        lottieID: '1f60d',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f525/lottie.json',
        label: 'Fire',
        lottieID: '1f525',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f4a9/lottie.json',
        label: 'Poop',
        lottieID: '1f4a9',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f984/lottie.json',
        label: 'Unicorn',
        lottieID: '1f984',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1faa9/lottie.json',
        label: 'Mirror Ball',
        lottieID: '1faa9',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f603/lottie.json',
        label: 'Smile',
        lottieID: '1f603',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/26a1/lottie.json',
        label: 'Zap',
        lottieID: '26a1',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f47d/lottie.json',
        label: 'Alien',
        lottieID: '1f47d',
      ),
      const XenEmoji(
        'https://fonts.gstatic.com/s/e/notoemoji/latest/1f92e/lottie.json',
        label: 'Vomit',
        lottieID: '1f92e',
      ),
    ];

    return Scaffold(
      body: Center(
        child: ListView(
          children: [
            for (final (i, lottie) in lotties.indexed)
              Align(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    const SizedBox(height: 30),
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Container(
                        width: 300,
                        height: 300,
                        decoration: const BoxDecoration(
                          borderRadius: BorderRadius.all(Radius.circular(10)),
                          image: DecorationImage(
                            fit: BoxFit.cover,
                            image: NetworkImage(
                              'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSc4bnfG3zNmNB6Dk4C3vge8FxKkdFH64E96jiW8FKdS_04gDdF',
                            ),
                          ),
                        ),
                      ),
                    ),
                    Wrap(
                      crossAxisAlignment: WrapCrossAlignment.center,
                      spacing: 5,
                      children: [
                        DecoratedBox(
                          decoration: BoxDecoration(
                            color: Colors.grey,
                            border: Border.all(color: Colors.grey),
                            borderRadius: BorderRadius.circular(20),
                          ),
                          child: XenEmojify(
                            lottieSource: LottieSources.network,
                            showLabel: false,
                            xenEmojifyDock: XenEmojifyDock(
                              dockColor: Colors.cyan.withOpacity(0.7),
                              onEmojiSelect: (emoji) {
                                setState(() => initialEmoji = emoji);
                              },
                              xenEmojis: lotties,
                            ),
                            initialEmoji: i == 0 ? null : lottie,
                          ),
                        ),
                        const Padding(
                          padding: EdgeInsets.all(8.0),
                          child: Wrap(
                            children: [
                              Icon(Icons.comment),
                              SizedBox(width: 5),
                              Text('Comment'),
                            ],
                          ),
                        ),
                        const Padding(
                          padding: EdgeInsets.all(8.0),
                          child: Wrap(
                            children: [
                              Icon(Icons.share_rounded),
                              SizedBox(width: 5),
                              Text('Share'),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用xen_emojify插件来进行表情符号转换的代码示例。xen_emojify插件允许你将文本中的表情符号代码(如:smile:)转换为相应的表情符号图像。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加xen_emojify依赖。

dependencies:
  flutter:
    sdk: flutter
  xen_emojify: ^最新版本号  # 请检查pub.dev获取最新版本号

2. 导入包

在你的Dart文件中(例如main.dart),导入xen_emojify包。

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

3. 使用EmojifyWidget

EmojifyWidgetxen_emojify包中提供的用于转换表情符号代码的Widget。以下是一个简单的示例,展示如何使用它。

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Emojify Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 使用EmojifyWidget进行转换
              EmojifyWidget(
                text: 'Hello :smile: this is a test :thumbsup:',
                style: TextStyle(fontSize: 24),
              ),
              // 原始文本(未转换)
              Text(
                'Hello :smile: this is a test :thumbsup:',
                style: TextStyle(fontSize: 24, color: Colors.grey),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

4. 运行应用

确保你已经安装了所有依赖项,然后运行你的Flutter应用。你应该会看到转换后的文本中,表情符号代码(如:smile::thumbsup:)已经被相应的表情符号图像所替代。

注意事项

  • 确保你已经正确添加了xen_emojify依赖,并且运行了flutter pub get来安装依赖。
  • EmojifyWidget内部使用了RichTextTextSpan来实现表情符号的转换,因此你可以根据需要自定义文本样式。
  • 如果你需要更复杂的转换逻辑或自定义表情符号资源,你可能需要深入了解xen_emojify的API文档或扩展其功能。

这样,你就可以在Flutter应用中使用xen_emojify插件进行表情符号转换了。

回到顶部