Flutter动画加载状态插件animated_state_loader的使用

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

Flutter动画加载状态插件animated_state_loader的使用

预览

Preview

特性

以下是该插件的一些特性展示:

  • 加载动画预览: Loading Animation

  • 成功动画预览: Success Animation

  • 错误动画预览: Error Animation

  • 信息动画预览: Info Animation

功能列表:

  • 动画检查、错误、加载和信息图标
  • 可自定义持续时间、颜色、线条宽度以及底部内容小部件(如果需要)
  • 可自定义背景透明度、容器颜色和圆角半径

使用方法

基本示例:

AnimatedStateLoader(
      size: 60, // 设置动画图标的大小
      animationType: AnimationType.loading, // 设置动画类型为加载
      child: Scaffold(
        body: Container(),
      ),
    );

更多示例请参考GitHub仓库中的示例代码。

完整示例Demo

下面是一个完整的Flutter应用示例,展示了如何在不同的状态下(如加载、成功、失败)切换动画:

import 'package:animated_state_loader/animated_state_loader.dart';
import 'package:flutter/material.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.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter 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> {
  int _counter = 0;
  AnimationType _currentAnimationType = AnimationType.loading;

  void _incrementCounter() async {
    setState(() {
      _counter += 1; // 增加计数器
      _currentAnimationType = AnimationType.loading; // 设置当前动画为加载
    });

    await Future.delayed(
      const Duration(seconds: 2), // 模拟延迟操作
    );

    setState(() {
      // 根据计数器值决定下一个动画是成功还是失败
      _currentAnimationType =
          _counter % 2 == 0 ? AnimationType.success : AnimationType.error;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return AnimatedStateLoader(
      size: 60, // 设置动画图标的大小
      animationType: _currentAnimationType, // 设置当前动画类型
      content: Text( // 设置底部内容文本
        _currentAnimationType == AnimationType.loading
            ? 'Loading...' // 当前动画为加载时显示"Loading..."
            : (_counter % 2 == 0)
                ? 'Success' // 当前动画为成功时显示"Success"
                : 'Failure', // 当前动画为失败时显示"Failure"
        style: const TextStyle(
          fontSize: 18,
        ),
      ),
      child: Scaffold(
        appBar: AppBar(
          backgroundColor: Theme.of(context).colorScheme.inversePrimary,
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              const Text(
                'You have pushed the button this many times:', // 提示文本
              ),
              Text(
                '$_counter', // 显示当前计数器值
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter, // 点击按钮触发计数器增加和动画切换
          tooltip: 'Increment',
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用animated_state_loader插件的示例代码。这个插件通常用于在加载数据时显示动画状态。

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

dependencies:
  flutter:
    sdk: flutter
  animated_state_loader: ^0.4.0  # 请使用最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下方式使用AnimatedStateLoader

import 'package:flutter/material.dart';
import 'package:animated_state_loader/animated_state_loader.dart';
import 'package:fluttertoast/fluttertoast.dart';  // 可选,用于显示加载完成提示

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Animated State Loader Demo'),
        ),
        body: Center(
          child: AnimatedStateLoaderExample(),
        ),
      ),
    );
  }
}

class AnimatedStateLoaderExample extends StatefulWidget {
  @override
  _AnimatedStateLoaderExampleState createState() => _AnimatedStateLoaderExampleState();
}

class _AnimatedStateLoaderExampleState extends State<AnimatedStateLoaderExample> {
  bool isLoading = true;
  String data = '';

  @override
  void initState() {
    super.initState();
    // 模拟数据加载
    Future.delayed(Duration(seconds: 2), () {
      setState(() {
        isLoading = false;
        data = '数据加载完成!';
      });
      Fluttertoast.showToast(msg: "数据加载完成!");  // 可选,显示加载完成提示
    });
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedStateLoader(
      active: isLoading,
      loader: Center(
        child: CircularProgressIndicator(),  // 加载动画
      ),
      child: Center(
        child: Text(
          data,
          style: TextStyle(fontSize: 20),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个AnimatedStateLoaderExample类,它是一个StatefulWidget
  2. _AnimatedStateLoaderExampleState类中,我们定义了一个isLoading状态变量,初始化为true,表示正在加载数据。
  3. 使用Future.delayed来模拟数据加载过程,2秒后将isLoading设置为false,并更新数据内容。
  4. AnimatedStateLoader组件根据isLoading状态显示加载动画或实际数据。当isLoadingtrue时,显示loader中的CircularProgressIndicator;当isLoadingfalse时,显示child中的Text组件。

这样,你就成功地使用了animated_state_loader插件来在Flutter应用中显示加载状态动画。

回到顶部