Flutter加载进度显示插件loading_progress的使用

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

Flutter加载进度显示插件loading_progress的使用

loading_progress 是一个用于在Flutter应用中显示加载进度指示器的小部件。它非常易于使用,并且可以根据需要进行定制。

网站示例

更多示例和文档可以访问 loading_progress 官方网站

使用步骤

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 loading_progress 依赖:

dependencies:
  loading_progress: ^1.0.2

2. 导入包

在需要使用的 Dart 文件中导入该包:

import 'package:loading_progress/loading_progress.dart';

3. 开始和停止加载指示器

开始加载

使用以下代码开始加载指示器:

LoadingProgress.start(context);

停止加载

使用以下代码停止加载指示器:

LoadingProgress.stop(context);

4. 完整示例

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

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: onTapStartBtn,
              child: const Text('Start Loading Progress'),
            ),
            const SizedBox(height: 25),
            ElevatedButton(
              onPressed: onTapStartCustomLoadingProgressBtn,
              child: const Text('Start Custom Loading Progress with GIF'),
            ),
            const SizedBox(height: 25),
            ElevatedButton(
              onPressed: onTapStartCustomWidgetLoadingProgressBtn,
              child: const Text('Start Custom Loading Progress with Widget'),
            ),
          ],
        ),
      ),
    );
  }

  // 普通加载指示器
  onTapStartBtn() async {
    LoadingProgress.start(context);
    await Future.delayed(const Duration(seconds: 3));
    LoadingProgress.stop(context);
  }

  // 使用GIF的自定义加载指示器
  onTapStartCustomLoadingProgressBtn() async {
    LoadingProgress.start(
      context,
      gifOrImagePath: 'assets/loading.gif', // 确保在 pubspec.yaml 中添加了 assets 路径
    );
    await Future.delayed(const Duration(seconds: 3));
    LoadingProgress.stop(context);
  }

  // 使用自定义小部件的加载指示器
  onTapStartCustomWidgetLoadingProgressBtn() async {
    LoadingProgress.start(
      context,
      widget: Container(
        width: MediaQuery.of(context).size.width / 4,
        padding: EdgeInsets.all(MediaQuery.of(context).size.width / 13),
        child: const AspectRatio(
          aspectRatio: 1,
          child: CircularProgressIndicator(),
        ),
      ),
    );
    await Future.delayed(const Duration(seconds: 3));
    LoadingProgress.stop(context);
  }
}

5. 使用 GIF 作为加载指示器

你还可以通过传递 gifOrImagePath 参数来使用 GIF 图像作为加载指示器:

LoadingProgress.start(
  context,
  gifOrImagePath: 'assets/loading.gif', // 确保在 pubspec.yaml 中添加了 assets 路径
);
await Future.delayed(const Duration(seconds: 3));
LoadingProgress.stop(context);

确保在 pubspec.yaml 文件中正确配置了资源路径:

flutter:
  assets:
    - assets/loading.gif

6. 使用自定义小部件作为加载指示器

你也可以传递一个自定义的小部件来替代默认的加载指示器:

LoadingProgress.start(
  context,
  widget: Container(
    width: MediaQuery.of(context).size.width / 4,
    padding: EdgeInsets.all(MediaQuery.of(context).size.width / 13),
    child: const AspectRatio(
      aspectRatio: 1,
      child: CircularProgressIndicator(),
    ),
  ),
);
await Future.delayed(const Duration(seconds: 3));
LoadingProgress.stop(context);

结论

loading_progress 插件为Flutter开发者提供了一种简单而灵活的方式来实现加载进度指示器。你可以根据项目需求选择使用默认的加载指示器、GIF 或者自定义小部件。希望这个指南对你有所帮助!


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

1 回复

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


当然,以下是如何在Flutter项目中使用loading_progress插件来显示加载进度的示例代码。这个插件通常用于在网络请求或其他耗时操作期间向用户显示进度。

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

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

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

接下来,这里是一个简单的示例,展示如何在Flutter应用中使用loading_progress插件:

import 'package:flutter/material.dart';
import 'package:loading_progress/loading_progress.dart';
import 'dart:async';

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

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

class LoadingProgressDemo extends StatefulWidget {
  @override
  _LoadingProgressDemoState createState() => _LoadingProgressDemoState();
}

class _LoadingProgressDemoState extends State<LoadingProgressDemo> {
  bool isLoading = false;
  double progress = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Progress Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                setState(() {
                  isLoading = true;
                });
                _simulateLoading();
              },
              child: Text('Start Loading'),
            ),
            SizedBox(height: 20),
            if (isLoading)
              LoadingProgressIndicator(
                progress: progress,
                width: 200,
                height: 200,
                backgroundColor: Colors.grey[200],
                color: Colors.blue,
                borderColor: Colors.blueAccent,
                borderStrokeWidth: 3.0,
                child: Center(
                  child: Text(
                    '${(progress * 100).toInt()}%',
                    style: TextStyle(color: Colors.white, fontSize: 24),
                  ),
                ),
              ),
          ],
        ),
      ),
    );
  }

  Future<void> _simulateLoading() async {
    Timer.periodic(Duration(milliseconds: 100), (timer) {
      setState(() {
        progress += 0.01;
        if (progress >= 1.0) {
          timer.cancel();
          setState(() {
            isLoading = false;
            progress = 0.0;
          });
        }
      });
    });
  }
}

解释

  1. 依赖管理

    • pubspec.yaml中添加loading_progress依赖。
  2. 主应用结构

    • MyApp是一个StatelessWidget,它定义了应用的主题和主页。
  3. 状态管理

    • LoadingProgressDemo是一个StatefulWidget,它管理加载状态和进度。
  4. UI组件

    • ElevatedButton用于触发加载操作。
    • LoadingProgressIndicator用于显示加载进度。
  5. 模拟加载

    • _simulateLoading方法使用Timer.periodic模拟一个耗时操作,每100毫秒更新一次进度,直到进度达到1.0(100%)。

这个示例展示了如何使用loading_progress插件来创建一个简单的加载进度指示器。你可以根据实际需求调整进度更新的逻辑和UI样式。

回到顶部