Flutter表情符号渲染插件flutter_twemoji的使用

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

Flutter表情符号渲染插件flutter_twemoji的使用

插件介绍

基于 jdecked的twemoji (v15.1.0)的分支,此插件提供了渲染表情符号的功能。

Twemoji插件示例

使用方法

显示单个表情符号

使用 Twemoji Widget 来显示单独的表情符号。

Twemoji(
  emoji: '🍕',
  height: 50,
  width: 50,
)
渲染带有表情符号的文本

TwemojiText Widget 允许你渲染带有嵌入式 Twemoji 的的文本。

TwemojiText(
  text: 'Flutter is awesome 🎉',
)
创建带表情符号的富文本

结合 TwemojiTextSpanRichText 可以创建包含表情符号的富文本内容。

RichText(
  text: TwemojiTextSpan(
    text: 'Text 🍕🍔🌭🍿🧂🥓🥨🥐🍞🥞🥞',
    style: Theme.of(context).textTheme.headline6,
  ),
)
只包括特定的表情符号

默认情况下,该包会包含所有 twemojis。为了减少整体 bundle 大小,可以在 pubspec.yaml 中指定要包含的表情符号。

flutter_twemoji:
  includes: '🍕🍔🌭🍿🧂增资.nio'

然后运行 dart run flutter_twemoji:include_emojis 来过滤生成资产。

示例代码

import 'dart:math' as math;

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) => MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        debugShowCheckedModeBanner: false,
        home: const MyHomePage(),
      );
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  final _emojis = '🇫 🇱 🇺 🇹 🇹 🇪 🇷 📱 💙 🚀 🫨';

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller =
        AnimationController(vsync: this, duration: const Duration(seconds: 5))
          ..repeat();
  }

  [@override](/user/override)
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text('flutter_twemoji'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              RichText(
                text: TextSpan(
                  children: [
                    TextSpan(
                      text: '$_emojis\nDefault Device Emoji\n\n',
                      style: const TextStyle(
                        color: Colors.black,
                        fontSize: 115,
                      ),
                    ),
                    TwemojiTextSpan(
                      text: '$_emojis\nTwemojiFormat.png\n\n',
                      twemojiFormat: TwemojiFormat.png,
                      style: const TextStyle(
                        color: Colors.black,
                        fontSize: 115,
                      ),
                    ),
                    TwemojiTextSpan(
                      text: '$_emojis\nTwemojiFormat.svg (x1.3)\n\n',
                      twemojiFormat: TwemojiFormat.svg,
                      emojiFontMultiplier: 1.3,
                      style: const TextStyle(
                        color: Colors.black,
                        fontSize: 115,
                      ),
                    ),
                  ],
                ),
              ),
              const TwemojiText(
                text: 'This is some text 💬 with Twemoji! 🚀',
              ),
              const TwemojiText(
                text: 'Even with support for Fitzpatrick modifiers! 👩👨🏿‍👩🏼‍',
              ),
              const SizedBox(height: 20),
              AnimatedBuilder(
                animation: _controller,
                builder: (context, child) => Transform.rotate(
                  angle: _controller.value * 2 * math.pi,
                  child: SizedBox(
                    height: 105,
                    width: 105,
                    child: Stack(
                      children: List.generate(
                        4,
                        (index) => Align(
                          alignment: _getAlign(index),
                          child: RotationTransition(
                            turns: AlwaysStoppedAnimation(index * 90 / 360),
                            child: const Twemoji(
                              emoji: '🍕',
                              height: 50,
                              width: 50,
                            ),
                          ),
                        ),
                      ),
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      );

  AlignmentGeometry _getAlign(int index) {
    switch (index) {
      case 0:
        return Alignment.topCenter;
      case 1:
        return Alignment.centerRight;
      case 2:
        return Alignment.bottomCenter;
      case  3:
        return Alignment.centerLeft;
      default:
        return Alignment.topCenter;
    }
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_twemoji插件来渲染表情符号的代码示例。flutter_twemoji插件允许你将普通的Unicode表情符号转换为Twitter的Twemoji表情符号风格。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_twemoji: ^x.y.z  # 请替换为最新版本号

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

步骤 2: 导入插件

在你的Dart文件中导入flutter_twemoji插件:

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

步骤 3: 使用TwemojiText小部件

flutter_twemoji提供了一个TwemojiText小部件,用于渲染带有Twemoji表情符号的文本。下面是一个简单的示例:

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

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

class MyHomePage extends StatelessWidget {
  final String textWithEmojis = "Hello 🌍! This is a Flutter 🚀 demo with 😄 emojis!";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Twemoji Demo'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: TwemojiText(
            textWithEmojis,
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

在这个示例中,TwemojiText小部件被用来渲染包含表情符号的文本。TwemojiText接受一个字符串参数(包含要渲染的文本),以及一个可选的TextStyle参数来定义文本的样式。

注意事项

  • 确保你使用的是最新版本的flutter_twemoji插件,以获取最新的功能和修复。
  • TwemojiText小部件内部使用了RichTextTextSpan来渲染文本和表情符号,因此你可以根据需要进一步自定义样式。

通过以上步骤,你就可以在Flutter应用中成功渲染带有Twemoji风格的表情符号了。

回到顶部