Flutter表情反馈插件flutter_emoji_feedback的使用

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

Flutter表情反馈插件flutter_emoji_feedback的使用

简介

flutter_emoji_feedback 是一个完全可定制的小部件,用于从用户那里获取反馈。它可以帮助你了解用户的感受、评估他们的体验等。

demo

📺 最新功能

现在可以使用动画Lottie文件(仅限JSON文件)作为表情预设,或者使用提供的 notoAnimatedEmojis 预设。(参见 PR #3

🚀 开始使用

从pub安装

flutter pub add flutter_emoji_feedback

📔 使用方法

导入包

import 'package:flutter_emoji_feedback/flutter_emoji_feedback.dart';

示例代码

以下是一个完整的示例应用程序,展示了如何使用 flutter_emoji_feedback 插件:

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Example App',
      home: HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

final emojiPresets = {
  'notoAnimatedEmojis': notoAnimatedEmojis,
  'classicEmojiPreset': classicEmojiPreset,
  'threeDEmojiPreset': threeDEmojiPreset,
  'handDrawnEmojiPreset': handDrawnEmojiPreset,
};

class _HomePageState extends State<HomePage> {
  int? rating;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: ListView(
            children: [
              ...emojiPresets.entries.map((entry) => Column(
                    children: [
                      Text(entry.key),
                      EmojiFeedback(
                        initialRating: 3,
                        onChangeWaitForAnimation: true,
                        emojiPreset: entry.value,
                        labelTextStyle: Theme.of(context)
                            .textTheme
                            .bodySmall
                            ?.copyWith(fontWeight: FontWeight.w400),
                        onChanged: (value) {
                          setState(() => rating = value);
                          // 显示SnackBar
                          ScaffoldMessenger.of(context)
                            ..clearSnackBars()
                            ..showSnackBar(SnackBar(content: Text('$value')));
                        },
                      )
                    ],
                  )),
              Column(
                children: [
                  const Text("Custom preset builder"),
                  EmojiFeedback(
                    initialRating: 3,
                    onChangeWaitForAnimation: true,
                    presetBuilder: (p0, p1, p2) => const Icon(Icons.star),
                    labelTextStyle: Theme.of(context)
                        .textTheme
                        .bodySmall
                        ?.copyWith(fontWeight: FontWeight.w400),
                    onChanged: (value) {
                      setState(() => rating = value);
                      // 显示SnackBar
                      ScaffoldMessenger.of(context)
                        ..clearSnackBars()
                        ..showSnackBar(SnackBar(content: Text('$value')));
                    },
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

参数说明

参数名称 描述 类型
onChangeWaitForAnimation 如果为true,表情的动画将在调用 onChanged 之前完成 bool
initialRating 设置初始评分,如果为null,则没有初始评分 int?
tapScale 用户按住表情时的比例,设置为 inactiveElementScale 则无效果 double
animDuration 动画持续时间 Duration
curve 动画曲线 Curve
inactiveElementScale 非活动元素的比例 double
onChanged 当项目被选中时调用的函数,值从1到 preset.length ValueChanged<int?>?
emojiPreset 表情列表。可用预设:classicEmojiPresetflatEmojiPresetthreeDEmojiPresetnotoAnimatedEmojisnotoEmojis。你可以创建自己的预设,详见定义预设 EmojiPreset
presetBuilder 自定义表情小部件构建器 EmojiBuilder?
showLabel 是否显示标签 bool
labelTextStyle 表情标签样式 TextStyle?
customLabels 定义自定义标签。如果你希望使用预定义的表情但带有自定义标签,这很有用 List<String>?
inactiveElementBlendColor 非活动元素的自定义混合颜色 Color?
spaceBetweenItems 项目之间的间距 double
elementSize 表情元素大小 double?
labelPadding 标签内边距 EdgeInsetsGeometry
enableFeedback 启用触觉反馈 bool
minRating 最低评分 int
maxRating 最高评分 int

🎨 定义预设

你可以轻松地使用 StaticEmojiPresetAnimatedEmojiPreset 创建预设,它们保存了表情。

// 定义静态表情预设使用SVG文件
// 替换 `image` 为你的SVG文件路径
const myStaticEmojiPreset = StaticEmojiPreset([
  StaticEmoji(
    image: 'assets/images/emoji1.svg',
    value: 1,
  ),
  StaticEmoji(
    image: 'assets/images/emoji2.svg',
    value: 2,
  ),
  StaticEmoji(
    image: 'assets/images/emoji3.svg',
    value: 3,
  ),
  StaticEmoji(
    image: 'assets/images/emoji4.svg',
    value: 4,
  ),
  StaticEmoji(
    image: 'assets/images/emoji5.svg',
    value: 5,
  ),
]);

// 定义动画表情预设使用Lottie文件
// 替换 `animation` 为你的Lottie文件路径
const myAnimatedEmojiPreset = AnimatedEmojiPreset([
  AnimatedEmoji(
    animation: 'assets/animations/emoji1.json',
    value: 1
  ),
  AnimatedEmoji(
    animation: 'assets/animations/emoji2.json',
    value: 2
  ),
  AnimatedEmoji(
    animation: 'assets/animations/emoji3.json',
    value: 3
  ),
  AnimatedEmoji(
    animation: 'assets/animations/emoji4.json',
    value: 4
  ),
  AnimatedEmoji(
    animation: 'assets/animations/emoji5.json',
    value: 5,
  ),
]);

📝 许可证

本项目遵循MIT许可证 - 详情请参阅 LICENSE 文件。

📄 更新日志

详情请参阅 CHANGELOG.md

📄 贡献

贡献是使开源社区成为学习、启发和创造的绝佳场所的重要因素。任何贡献都 非常感谢

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交Pull Request

📄 贡献者

📄 致谢

Attribution

本项目使用了 Animated Noto Emoji,其许可协议为 Creative Commons Attribution 4.0 International License (CC BY 4.0)

© Google LLC. Licensed under CC BY 4.0.

emojis emojis emojis emojis emojis

Sponsor

如果你觉得这个项目有用,你可以 赞助我

或者你可以

Buy Me A Coffee


希望这篇文档对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_emoji_feedback插件的示例代码。这个插件允许用户通过表情符号提供反馈,非常适合用于应用内的用户满意度调查或快速反馈收集。

步骤 1: 添加依赖

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

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

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

步骤 2: 导入插件

在你希望使用表情反馈功能的Dart文件中导入插件:

import 'package:flutter_emoji_feedback/flutter_emoji_feedback.dart';

步骤 3: 配置并使用插件

下面是一个完整的示例,展示如何配置并使用flutter_emoji_feedback插件:

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<EmojiFeedbackState> emojiFeedbackKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Emoji Feedback Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Click the button below to show the emoji feedback dialog.',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                showEmojiFeedbackDialog(
                  context: context,
                  emojiFeedbackKey: emojiFeedbackKey,
                  onEmojiSelected: (emoji) {
                    print('Selected emoji: $emoji');
                    // 在这里处理选中的表情
                  },
                  onCancel: () {
                    print('Feedback dialog was cancelled.');
                    // 在这里处理取消操作
                  },
                  title: 'Provide Feedback',
                  description: 'Please select an emoji to provide your feedback.',
                  positiveButtonLabel: 'Submit',
                  negativeButtonLabel: 'Cancel',
                  // 可选:配置表情集合和自定义表情
                  emojiList: [
                    Emoji(emoji: '😊', label: 'Happy'),
                    Emoji(emoji: '😕', label: 'Confused'),
                    Emoji(emoji: '😠', label: 'Angry'),
                    // 添加更多表情...
                  ],
                  customEmojis: [
                    CustomEmoji(emoji: '💯', label: 'Excellent'),
                    CustomEmoji(emoji: '🚀', label: 'Awesome'),
                    // 添加更多自定义表情...
                  ],
                );
              },
              child: Text('Show Feedback Dialog'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加了flutter_emoji_feedback依赖。
  2. 导入插件:在需要使用的Dart文件中导入了flutter_emoji_feedback
  3. 配置并使用
    • 使用GlobalKey<EmojiFeedbackState>来管理插件的状态。
    • 创建了一个按钮,点击按钮时调用showEmojiFeedbackDialog函数来显示表情反馈对话框。
    • showEmojiFeedbackDialog中配置了对话框的标题、描述、提交和取消按钮的标签,以及可选的表情集合和自定义表情。
    • 提供了onEmojiSelectedonCancel回调函数来处理用户的选择和取消操作。

通过以上步骤,你就可以在你的Flutter应用中集成并使用flutter_emoji_feedback插件来收集用户的表情反馈了。

回到顶部