Flutter表情反馈插件flutter_emoji_feedback的使用
Flutter表情反馈插件flutter_emoji_feedback的使用
简介
flutter_emoji_feedback
是一个完全可定制的小部件,用于从用户那里获取反馈。它可以帮助你了解用户的感受、评估他们的体验等。
📺 最新功能
现在可以使用动画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 |
表情列表。可用预设:classicEmojiPreset ,flatEmojiPreset ,threeDEmojiPreset ,notoAnimatedEmojis ,notoEmojis 。你可以创建自己的预设,详见定义预设 |
EmojiPreset |
presetBuilder |
自定义表情小部件构建器 | EmojiBuilder? |
showLabel |
是否显示标签 | bool |
labelTextStyle |
表情标签样式 | TextStyle? |
customLabels |
定义自定义标签。如果你希望使用预定义的表情但带有自定义标签,这很有用 | List<String>? |
inactiveElementBlendColor |
非活动元素的自定义混合颜色 | Color? |
spaceBetweenItems |
项目之间的间距 | double |
elementSize |
表情元素大小 | double? |
labelPadding |
标签内边距 | EdgeInsetsGeometry |
enableFeedback |
启用触觉反馈 | bool |
minRating |
最低评分 | int |
maxRating |
最高评分 | int |
🎨 定义预设
你可以轻松地使用 StaticEmojiPreset
和 AnimatedEmojiPreset
创建预设,它们保存了表情。
// 定义静态表情预设使用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。
📄 贡献
贡献是使开源社区成为学习、启发和创造的绝佳场所的重要因素。任何贡献都 非常感谢。
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 提交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.
Sponsor
如果你觉得这个项目有用,你可以 赞助我。
或者你可以
希望这篇文档对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter表情反馈插件flutter_emoji_feedback的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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'),
),
],
),
),
);
}
}
解释
- 依赖添加:在
pubspec.yaml
文件中添加了flutter_emoji_feedback
依赖。 - 导入插件:在需要使用的Dart文件中导入了
flutter_emoji_feedback
。 - 配置并使用:
- 使用
GlobalKey<EmojiFeedbackState>
来管理插件的状态。 - 创建了一个按钮,点击按钮时调用
showEmojiFeedbackDialog
函数来显示表情反馈对话框。 - 在
showEmojiFeedbackDialog
中配置了对话框的标题、描述、提交和取消按钮的标签,以及可选的表情集合和自定义表情。 - 提供了
onEmojiSelected
和onCancel
回调函数来处理用户的选择和取消操作。
- 使用
通过以上步骤,你就可以在你的Flutter应用中集成并使用flutter_emoji_feedback
插件来收集用户的表情反馈了。