Flutter动画按钮插件animated_react_button的使用

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

Flutter动画按钮插件animated_react_button的使用

截图

以下是animated_react_button插件的效果截图:

favorite_heart.gif

favorite_heart_real_example.gif

特性

  • 反应动作。

开始使用

要使用这个包,请按照以下步骤操作:

  1. 在您的 pubspec.yaml 文件中添加依赖项:
dependencies:
  flutter:
    sdk: flutter
  animated_react_button:

如何使用

以下是一个简单的示例,展示如何使用 AnimatedReactButton

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Animated React Button Example')),
        body: Center(
          child: Container(
            child: AnimatedReactButton(
              defaultColor: Colors.grey, // 默认颜色
              reactColor: Colors.red, // 反应颜色
              onPressed: () async {
                // 模拟API/IO等待调用
                await Future.delayed(Duration(seconds: 1));
                print('Button pressed!');
              },
            ),
          ),
        ),
      ),
    );
  }
}

完整示例代码

以下是一个更完整的示例,展示了如何在列表中使用 AnimatedReactButton

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

// Model
class Movie {
  final String title;
  final List<String> genere;
  bool isFavorite = false;
  bool isReacting = false;

  Movie({
    required this.title,
    required this.genere,
  });
}

class Example extends StatefulWidget {
  [@override](/user/override)
  State<Example> createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  List<Movie> movies = [];
  bool isReacting = false;

  [@override](/user/override)
  void initState() {
    fetchMoviesFakeApi();
    super.initState();
  }

  void fetchMoviesFakeApi() {
    // 加载指示器将在这里设置
    movies = [
      Movie(
          title: "House of the dragon",
          genere: ["Action", "Adventure", "Drama"]),
      Movie(
          title: "She-Hulk: Attorney at Law",
          genere: ["Action", "Adventure", "Comedy"]),
    ];
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: ListView.builder(
            itemCount: movies.length,
            itemBuilder: (context, index) {
              return Container(
                margin: const EdgeInsets.only(bottom: 5),
                child: Card(
                  elevation: 5,
                  child: ListTile(
                    title: Text(movies[index].title),
                    subtitle: Row(
                      children: List<Widget>.generate(
                        movies[index].genere.length,
                        (genIndex) => Container(
                          margin: const EdgeInsets.only(left: 8),
                          padding: const EdgeInsets.all(5),
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(8),
                            color: Colors.grey.withOpacity(0.2),
                          ),
                          child: Text(
                            movies[index].genere[genIndex],
                            style: const TextStyle(fontSize: 10),
                          ),
                        ),
                      ),
                    ),
                    trailing: Stack(
                      children: [
                        AnimatedReactButton(
                          onPressed: () async {
                            // API 调用
                            movies[index].isReacting = true;
                            setState(() {
                              isReacting = true;
                            });
                            await Future.delayed(const Duration(seconds: 1));
                            setState(() {
                              movies[index].isFavorite =
                                  !movies[index].isFavorite;
                            });
                            movies[index].isReacting = false;
                          },
                          defaultColor: movies[index].isFavorite
                              ? Colors.red
                              : Colors.grey,
                          reactColor: !movies[index].isFavorite
                              ? Colors.red
                              : Colors.grey,
                        ),
                        Visibility(
                          visible: movies[index].isReacting,
                          child: const CircularProgressIndicator(
                            strokeWidth: 2,
                            color: Colors.red,
                          ),
                        )
                      ],
                    ),
                  ),
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用animated_react_button插件来实现动画按钮的一个简单示例。这个插件允许你创建具有点击动画效果的按钮,增强用户体验。

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

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

然后,运行flutter pub get来获取依赖项。

接下来,在你的Flutter项目中创建一个带有动画按钮的页面。以下是一个完整的示例代码:

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

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

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

class AnimatedButtonScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Animated React Button Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AnimatedReactButton(
              width: 200,
              height: 60,
              onPress: () {
                // 在这里处理按钮点击事件
                print("Button pressed!");
              },
              buttonColor: Colors.blue,
              rippleColor: Colors.lightBlueAccent,
              animationDuration: 300,
              rippleDuration: 700,
              child: Text(
                'Press Me',
                style: TextStyle(color: Colors.white, fontSize: 18),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个带有动画效果的按钮。AnimatedReactButton的主要参数包括:

  • widthheight:按钮的宽度和高度。
  • onPress:按钮点击时的回调函数。
  • buttonColor:按钮的背景颜色。
  • rippleColor:点击动画时的波纹颜色。
  • animationDuration:按钮动画的持续时间(毫秒)。
  • rippleDuration:波纹动画的持续时间(毫秒)。
  • child:按钮上的子组件,通常是文本或图标。

你可以根据需要调整这些参数,以创建符合你应用风格的动画按钮。希望这个示例对你有所帮助!

回到顶部