Flutter彩带动画插件wndr_flutter_confetti的使用

Flutter彩带动画插件wndr_flutter_confetti的使用

插件简介

Wndr Confetti Package 是一个Flutter包,它简化了从屏幕底部角落显示彩带(confetti)动画的过程。该插件具有以下特点:

  • 简单集成彩带动画
  • 支持自定义彩带图像和颜色

使用方法

1. 导入插件

首先,在您的Dart文件中导入 wndr_flutter_confetti 包:

import 'package:wndr_flutter_confetti/wndr_flutter_confetti.dart';

2. 显示彩带动画

WndrConfetti 提供了两种方法来显示彩带动画,分别用于处理图像资源(如PNG、JPG等)和矢量图形资源(如SVG)。这两个方法的第一个参数是 BuildContext,第二个参数是资源路径,最后一个参数是一个可选的颜色列表,这些颜色将随机应用于彩带粒子作为 ColorFilter

使用图像资源显示彩带

如果您想使用图像资源(如PNG、JPG等)来显示彩带,可以使用 startConfettiWithImageAsset 方法:

WunderFlutterConfetti.startConfettiWithImageAsset(
    context,
    'assets/ufo.png', // 图像资源路径
    [Colors.red, Colors.blue, Colors.green, Colors.orange, Colors.yellow] // 可选的颜色列表
);
使用矢量图形资源显示彩带

如果您想使用矢量图形资源(如SVG)来显示彩带,可以使用 startConfettiWithSvgAsset 方法:

WunderFlutterConfetti.startConfettiWithSvgAsset(
    context,
    'assets/ufo.svg', // 矢量图形资源路径
    [Colors.red, Colors.blue, Colors.green, Colors.orange, Colors.yellow] // 可选的颜色列表
);

完整示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中使用 wndr_flutter_confetti 插件来显示彩带动画。此示例包含两个按钮,分别用于触发基于SVG和PNG图像的彩带动画。

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

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

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

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

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> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextButton(
              onPressed: () {
                // 触发基于SVG的彩带动画
                WunderFlutterConfetti.startConfettiWithSvgAsset(
                  context,
                  'assets/ufo.svg',
                  colors: [
                    Colors.red,
                    Colors.blue,
                    Colors.green,
                    Colors.orange,
                    Colors.yellow
                  ],
                );
              },
              child: const Text('Confetti with SVG'),
            ),
            TextButton(
              onPressed: () {
                // 触发基于PNG的彩带动画
                WunderFlutterConfetti.startConfettiWithImageAsset(
                  context,
                  'assets/ufo.png',
                  colors: [
                    Colors.red,
                    Colors.blue,
                    Colors.green,
                    Colors.orange,
                    Colors.yellow
                  ],
                );
              },
              child: const Text('Confetti with PNG'),
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 wndr_flutter_confetti 插件在 Flutter 中实现彩带动画的示例代码。这个插件允许你在应用中添加庆祝效果的彩带动画。

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

dependencies:
  flutter:
    sdk: flutter
  wndr_flutter_confetti: ^^最新版本号  # 请替换为实际最新版本号

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

接下来,在你的 Flutter 应用中实现彩带动画。以下是一个完整的示例代码:

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

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

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

class ConfettiScreen extends StatefulWidget {
  @override
  _ConfettiScreenState createState() => _ConfettiScreenState();
}

class _ConfettiScreenState extends State<ConfettiScreen> with SingleTickerProviderStateMixin {
  late ConfettiController _confettiController;

  @override
  void initState() {
    super.initState();
    _confettiController = ConfettiController(
      duration: Duration(seconds: 5),
      blastDirectionality: BlastDirectionality.explosive,
      maximumBlastForce: 0.5,
      minimumBlastForce: 0.2,
      emissionFrequency: 0.05,
      numberOfParticles: 200,
      colors: [
        Colors.redAccent,
        Colors.greenAccent,
        Colors.blueAccent,
        Colors.yellowAccent,
      ],
      shapes: [
        ParticleShape.circle,
        ParticleShape.square,
        ParticleShape.triangle,
      ],
      ..addBlast(
        Alignment.center,
        particleCount: 50,
        force: 0.3,
        color: Colors.purpleAccent,
      ),
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Confetti Animation Demo'),
      ),
      body: Center(
        child: ConfettiWidget(
          confettiController: _confettiController,
          blastDirectionCallback: (alignment) {
            // 可以在这里添加自定义的爆炸方向回调
          },
          shouldLoop: true,
          child: GestureDetector(
            onTap: () {
              _confettiController.play();
            },
            child: Container(
              width: double.infinity,
              height: double.infinity,
              color: Colors.transparent,
            ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _confettiController.play();
        },
        tooltip: 'Play Confetti',
        child: Icon(Icons.add),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个 ConfettiScreen,它使用 wndr_flutter_confetti 插件来显示彩带动画。以下是关键部分的解释:

  1. ConfettiController:这是控制彩带动画的主要对象。你可以配置动画的持续时间、爆炸方向、粒子数量、颜色、形状等。

  2. ConfettiWidget:这是显示彩带动画的 widget。它需要一个 ConfettiController 实例来控制动画。

  3. GestureDetector:用于监听屏幕点击事件。每次点击屏幕时,都会调用 _confettiController.play() 方法来播放彩带动画。

  4. FloatingActionButton:一个浮动按钮,点击它也可以播放彩带动画。

你可以根据需要调整 ConfettiController 的配置参数,以实现不同的动画效果。希望这个示例对你有所帮助!

回到顶部