Flutter动画效果插件flutter_animated_reaction的使用

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

Flutter动画效果插件flutter_animated_reaction的使用

Flutter Animated Reaction 是一个动画反应覆盖层插件(例如:Facebook、LinkedIn),你可以使用自己的反应图标(图片/动图)进行自定义。无论你的反应按钮在屏幕上的位置在哪里,此插件都可以帮助你在屏幕上正确的位置弹出带有你所选择的反应图标的动画覆盖层。

示例

动画效果

特性

  • 可以添加自定义的反应图标(图片或动图)
  • 显示反应覆盖层时有酷炫的动画效果
  • 拖动任何反应图标时会产生漂亮的动画效果
  • 内置了Facebook的反应图标
  • 支持反应音效功能

开始使用

首先,你需要导入 flutter_animated_reaction 包:

import 'package:flutter_animated_reaction/flutter_animated_reaction.dart';

使用方法

为了更好地理解,你可以查看示例应用。

AnimatedFlutterReaction().showOverlay(
  context: context,
  key: key,
  onReaction: (val) {
    print(val);
  },
);

参数说明

参数名 描述
Key 反应按钮上使用的全局键。用于找到渲染框并测量其位置。
reactions 要在覆盖层中显示的所有反应图标列表(图片/动图路径)。
onReaction 当点击任一反应图标时触发的回调函数。
backgroundColor 覆盖层背景颜色。
overlaySize 覆盖层宽度。
iconSize 反应图标的大小,默认为 (45,45)。

完整示例代码

以下是一个完整的示例代码,展示了如何在应用中使用 flutter_animated_reaction 插件:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Animated Reaction'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey key = GlobalKey();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 20),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Row(
              children: [
                Expanded(
                  child: ElevatedButton(
                    key: key,
                    onPressed: () {},
                    child: const Text("Like"),
                    onLongPress: () {
                      AnimatedFlutterReaction().showOverlay(
                        context: context,
                        key: key,
                        onReaction: (val) {
                          ScaffoldMessenger.of(context)
                              .showSnackBar(SnackBar(content: Text("$val")));
                        },
                      );
                    },
                  ),
                ),
                Expanded(
                  child: ElevatedButton(
                    onPressed: () {},
                    child: const Text("Comment"),
                  ),
                ),
                Expanded(
                  child: ElevatedButton(
                    onPressed: () {},
                    child: const Text("Share"),
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter动画效果插件flutter_animated_reaction的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动画效果插件flutter_animated_reaction的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_animated_reaction插件来实现动画效果的一个代码示例。flutter_animated_reaction插件允许你创建响应式的动画,通常用于按钮点击或其他用户交互。

首先,确保你已经在pubspec.yaml文件中添加了flutter_animated_reaction依赖:

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

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

接下来,你可以在你的Flutter应用中使用该插件。以下是一个简单的示例,展示如何使用flutter_animated_reaction来实现一个带有动画效果的按钮:

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

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

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

class AnimatedReactionDemo extends StatefulWidget {
  @override
  _AnimatedReactionDemoState createState() => _AnimatedReactionDemoState();
}

class _AnimatedReactionDemoState extends State<AnimatedReactionDemo> {
  late ReactionController _controller;

  @override
  void initState() {
    super.initState();
    _controller = ReactionController();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animated Reaction Demo'),
      ),
      body: Center(
        child: ReactionButton(
          controller: _controller,
          child: Text(
            'Click Me',
            style: TextStyle(fontSize: 24, color: Colors.white),
          ),
          onReactionEnd: () {
            // 动画结束时执行的回调
            print('Animation Ended');
          },
          reaction: const ScaleReaction(
            scale: 1.2,
            color: Colors.blue,
            duration: Duration(milliseconds: 300),
          ),
          decoration: BoxDecoration(
            color: Colors.grey,
            borderRadius: BorderRadius.circular(20),
            padding: EdgeInsets.all(16),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个带有动画效果的按钮。当用户点击按钮时,按钮会按照ScaleReaction定义的动画进行缩放,并且颜色会改变。

  • ReactionController:管理动画的状态。
  • ReactionButton:带有动画效果的按钮组件。
  • ScaleReaction:定义了一个缩放动画,包括缩放比例、颜色和动画持续时间。

你可以根据需要调整动画效果,例如使用RotateReaction来实现旋转动画,或者使用ColorReaction来改变颜色。flutter_animated_reaction插件提供了多种预定义的动画效果,你可以根据项目需求选择合适的动画。

回到顶部