Flutter加载状态显示插件flutter_loading的使用

Flutter加载状态显示插件flutter_loading的使用

您可以使用Future轻松配置加载屏幕。

开始使用

  1. 使用 mixin LoadingStateMixin
  2. 配置 buildLoadingContainer
  3. 调用 loading(future)

示例代码

以下是一个完整的示例,展示如何在Flutter应用中使用flutter_loading插件来显示加载状态。

import 'package:flutter/material.dart';
import 'package:flutter_loading/flutter_loading.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: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with LoadingStateMixin {
  int _counter = 0;

  void _incrementCounter() async {
    // 调用 loading 方法并传入异步任务
    int tick = await loading(_action());
    setState(() {
      _counter += tick;
    });
  }

  // 模拟一个耗时操作
  Future<int> _action() async {
    await Future.delayed(Duration(milliseconds: 1000)); // 模拟1秒延迟
    return 1;
  }

  @override
  Widget build(BuildContext context) {
    // 构建带有加载状态的容器
    return buildLoadingContainer(
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                '你已经按下了按钮多少次:',
              ),
              Text(
                '$_counter',
                style: Theme.of(context).textTheme.display1,
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: '增加',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

代码解释

  1. 引入依赖

    import 'package:flutter_loading/flutter_loading.dart';
    

    引入flutter_loading插件。

  2. 使用 LoadingStateMixin

    class _MyHomePageState extends State<MyHomePage> with LoadingStateMixin
    

    使用LoadingStateMixin以支持加载状态管理。

  3. 定义异步任务

    Future<int> _action() async {
      await Future.delayed(Duration(milliseconds: 1000));
      return 1;
    }
    

    定义一个模拟的异步任务,这里使用Future.delayed模拟耗时操作。

  4. 调用 loading 方法

    int tick = await loading(_action());
    

    调用loading方法并传入异步任务,它会在任务执行期间显示加载动画。

  5. 构建带有加载状态的容器

    return buildLoadingContainer(
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('你已经按下了按钮多少次:'),
              Text('$_counter', style: Theme.of(context).textTheme.display1),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: '增加',
          child: Icon(Icons.add),
        ),
      ),
    );
    

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

1 回复

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


flutter_loading 是一个用于在 Flutter 应用中显示加载状态的插件。它可以帮助你在异步操作(如网络请求、数据库查询等)期间显示加载指示器,以改善用户体验。以下是使用 flutter_loading 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_loading 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_loading: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_loading 包:

import 'package:flutter_loading/flutter_loading.dart';

3. 使用 FlutterLoading

FlutterLoading 提供了多种方法来显示和隐藏加载指示器。以下是一个简单的示例:

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

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

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

  Future<void> _simulateLoading() async {
    setState(() {
      _isLoading = true;
    });

    // 模拟一个异步操作
    await Future.delayed(Duration(seconds: 2));

    setState(() {
      _isLoading = false;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Loading Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _isLoading ? null : _simulateLoading,
              child: Text('Start Loading'),
            ),
            SizedBox(height: 20),
            if (_isLoading) FlutterLoading(),
          ],
        ),
      ),
    );
  }
}

4. 自定义加载指示器

FlutterLoading 允许你自定义加载指示器的外观。你可以通过传递 loadingWidget 参数来指定自定义的加载 widget:

FlutterLoading(
  loadingWidget: CircularProgressIndicator(
    valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
  ),
)

5. 显示和隐藏加载指示器

你可以在异步操作开始和结束时手动显示和隐藏加载指示器:

FlutterLoading.show(context); // 显示加载指示器

// 执行异步操作
await Future.delayed(Duration(seconds: 2));

FlutterLoading.hide(); // 隐藏加载指示器

6. 完整示例

以下是一个完整的示例,展示了如何使用 FlutterLoading 来显示和隐藏加载指示器:

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

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

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

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

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

  Future<void> _simulateLoading() async {
    setState(() {
      _isLoading = true;
    });

    // 显示加载指示器
    FlutterLoading.show(context);

    // 模拟一个异步操作
    await Future.delayed(Duration(seconds: 2));

    // 隐藏加载指示器
    FlutterLoading.hide();

    setState(() {
      _isLoading = false;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Loading Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _isLoading ? null : _simulateLoading,
              child: Text('Start Loading'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部