Flutter动画加载插件flare_loading的使用

Flutter动画加载插件 flare_loading 的使用

flare_loading 是一个基于 Flare 动画的加载小部件,允许你创建自定义的加载小部件或对话框。如果你使用的是 Rive 而不是 Flare,请使用 rive_loading 插件。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flare_loading: ^<latest_version>

然后运行 flutter pub get 来安装该插件。

使用方法

基本用法

FlareLoading(
  name: 'animation.flr', 
  startAnimation: 'intro',
  loopAnimation: 'circle',
  endAnimation: 'end',
);

参数说明:

  • name: Flare 动画的路径和名称。
  • until: 返回一个 Future 的回调函数,用于处理初始化。
  • isLoading: 如果你想通过布尔值管理加载状态,可以使用这个参数作为 until 的替代。
  • loopAnimation: 循环播放的动画名称。
  • endAnimation: 当 until 完成或 isLoadingfalse 时播放的结束动画。
  • startAnimation: 开始时播放的动画名称。
  • height: 强制设置 Flare 动画的高度,默认情况下它会占据所有可用空间。
  • width: 强制设置 Flare 动画的宽度,默认情况下它会占据所有可用空间。
  • alignment: Flare 动画的对齐方式,默认居中。
  • onSuccess: 动画完成后且 isLoadingfalseuntil 完成时调用的回调函数。
  • onError: 当 until 失败时调用的回调函数。

可用模式

只有一个动画

如果只需要显示一个动画并停留在最后一帧,则只需指定 startAnimation

FlareLoading(
  name: 'loading.flr',
  startAnimation: 'Loading',
  width: 200,
  height: 200,
);

开始和循环动画

如果你的动画有一个介绍和一个循环状态,则需要指定 startAnimationloopAnimation

FlareLoading(
  name: 'loading.flr',
  startAnimation: 'Intro',
  loopAnimation: 'Looping',
  width: 200,
  height: 200,
);

结束和循环动画

如果你的动画有一个结束和一个循环状态,则需要指定 endAnimationloopAnimation

FlareLoading(
  name: 'loading.flr',
  endAnimation: 'Complete',
  loopAnimation: 'Looping',
  width: 200,
  height: 200,
);

开始和结束动画

如果你的动画有一个介绍和一个结束状态,并且应该停留在最后一帧,则只需指定 startAnimationendAnimation

FlareLoading(
  name: 'loading.flr',
  startAnimation: 'Intro',
  endAnimation: 'Complete',
  width: 200,
  height: 200,
);

开始、结束和循环动画

如果你的动画有一个介绍、一个结束和一个循环状态,则需要指定 startAnimationendAnimationloopAnimation

FlareLoading(
  name: 'loading.flr',
  startAnimation: 'Intro',
  endAnimation: 'Complete',
  loopAnimation: 'Looping',
  width: 200,
  height: 200,
);

示例 Demo

下面是一个完整的示例代码,展示了如何使用 flare_loading 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  bool _isLoading = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          FlareLoading(
            name: 'assets/loading.flr',
            loopAnimation: 'Loading',
            startAnimation: 'Loading',
            endAnimation: 'Complete',
            width: 200,
            height: 200,
            fit: BoxFit.fill,
            until: () => Future.delayed(Duration(seconds: 5)),
            onSuccess: (_) {
              print('Finished');
            },
            onError: (err, stack) {
              print(err);
            },
          ),
          Expanded(
            child: Row(
              children: <Widget>[
                Expanded(
                  child: FlareLoading(
                    name: 'assets/loading.flr',
                    loopAnimation: 'Loading',
                    endAnimation: 'Complete',
                    isLoading: _isLoading,
                    onSuccess: (_) {
                      print('Finished');
                    },
                    onError: (err, stack) {
                      print(err);
                    },
                  ),
                ),
                ElevatedButton(
                  child: Text('Toggle loading'),
                  onPressed: () => setState(() {
                    _isLoading = !_isLoading;
                  }),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,flare_loading 是一个基于 Flutter 的动画加载插件,它利用 Rive(以前称为 Flare)动画引擎来创建和展示复杂的加载动画。以下是如何在 Flutter 项目中使用 flare_loading 插件的详细步骤和代码示例。

1. 添加依赖

首先,在你的 Flutter 项目的 pubspec.yaml 文件中添加 flare_loading 依赖:

dependencies:
  flare_loading: ^3.0.0  # 请检查最新版本号
  flare_dart: ^2.0.5  # flare_loading 依赖 flare_dart,所以也需要添加
  flutter:
    sdk: flutter

2. 导入包

在你的 Dart 文件中导入必要的包:

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

3. 加载 Flare 动画文件

确保你已经有一个 .flr 文件(Flare 动画文件),并将其放在项目的 assets 文件夹中。然后在 pubspec.yaml 中声明这个资产:

flutter:
  assets:
    - assets/your_flare_animation.flr

4. 使用 FlareLoading 组件

在你的 Flutter 组件中使用 FlareLoading 组件来展示加载动画。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flare Loading Example'),
        ),
        body: Center(
          child: FlareLoading(
            flare: 'assets/your_flare_animation.flr', // 你的 Flare 动画文件路径
            animation: 'loading', // 动画名称,在 Flare 编辑器中定义
            color: Colors.blue, // 动画颜色
            size: 50.0, // 动画大小
            isLoading: true, // 是否显示加载动画
          ),
        ),
      ),
    );
  }
}

5. 控制加载状态

你可以通过控制 isLoading 属性来显示或隐藏加载动画。例如,你可以在一个状态管理类中管理这个状态:

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  bool isLoading = true;

  void startLoading() {
    setState(() {
      isLoading = true;
    });
    // 模拟一个异步操作,比如网络请求
    Future.delayed(Duration(seconds: 2), () {
      setState(() {
        isLoading = false;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flare Loading Control'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            FlareLoading(
              flare: 'assets/your_flare_animation.flr',
              animation: 'loading',
              color: Colors.blue,
              size: 50.0,
              isLoading: isLoading,
            ),
            SizedBox(height: 20.0),
            ElevatedButton(
              onPressed: startLoading,
              child: Text('Start Loading'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,当你点击按钮时,startLoading 方法会被调用,它会启动加载动画并在两秒后停止。

这就是在 Flutter 中使用 flare_loading 插件来展示加载动画的基本步骤和代码示例。希望这对你有所帮助!

回到顶部