Flutter进度管理插件progress_manager的使用
Flutter进度管理插件progress_manager的使用
特性
一个可以管理进度的工具,通过在栈上进行push和pop操作来管理进度。
开始使用
轻松管理多个API调用的进度。
使用方法
首先,将整个项目包裹在ProgressManager中。根据需要进行自定义。在发起API调用之前,调用LoaderProvider().increment();在API调用完成后,调用LoaderProvider().decrement()。如果栈的大小大于1,则会显示进度;当栈的大小降到0或以下时,进度消失。这简化了对多个API调用的进度管理。此外,在bloc层中使用它时,不依赖上下文会让使用更加方便。
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:bloc_pattern/bloc_pattern.dart'; // 假设使用bloc_pattern作为示例
import 'package:progress_manager/progress_manager.dart'; // 导入progress_manager包
class YourApp extends StatelessWidget {
const YourApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
Future.delayed(const Duration(seconds: 2), () {
/// 等待build完成后再执行数据获取
fetchData();
fetchDataOther();
});
return MultiBlocProvider(
providers: providers(), // 假设这里有一些bloc provider
child: MaterialApp(
/// 这里将整个项目包裹在ProgressManager中
home: const ProgressManager(
child: HomeView(),
),
),
);
}
}
Future<List<Station>?> fetchData() async {
LoaderProvider().increment(); // 开始加载进度
final response = await _dioClient.get(_getDataPath); // 模拟API调用
if (response.statusCode == 200) {
var list = (response.data as List).map((e) => Data.fromJson(e)).toList();
LoaderProvider().decrement(); // 结束加载进度
return list;
} else {
LoaderProvider().decrement(); // 结束加载进度
throw Exception('Failed to load data');
}
/// 注意:每次increment后都需要对应的decrement,否则进度条可能会一直显示。
}
Future<List<Station>?> fetchDataOther() async {
LoaderProvider().increment(); // 开始加载进度
final response = await _dioClient.get(_getDataPathOther); // 模拟另一个API调用
if (response.statusCode == 200) {
var list = (response.data as List).map((e) => Data.fromJson(e)).toList();
LoaderProvider().decrement(); // 结束加载进度
return list;
} else {
LoaderProvider().decrement(); // 结束加载进度
throw Exception('Failed to load data');
}
}
更多关于Flutter进度管理插件progress_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter进度管理插件progress_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
progress_manager 是一个用于在 Flutter 中管理进度的插件。它可以帮助你轻松地管理应用的加载、处理、下载等任务的进度。以下是如何使用 progress_manager 插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 progress_manager 的依赖:
dependencies:
flutter:
sdk: flutter
progress_manager: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get 来安装依赖。
2. 导入包
在需要使用 progress_manager 的文件中导入包:
import 'package:progress_manager/progress_manager.dart';
3. 使用 ProgressManager
ProgressManager 是一个单例类,你可以通过 ProgressManager.instance 来访问它。以下是一些常见的用法示例:
3.1 显示进度
你可以使用 ProgressManager 来显示一个进度指示器。例如,在加载数据时显示进度:
void loadData() async {
ProgressManager.instance.showProgress();
// 模拟一个耗时的任务
await Future.delayed(Duration(seconds: 3));
ProgressManager.instance.hideProgress();
}
3.2 更新进度
你也可以在任务执行过程中更新进度。例如,在下载文件时更新进度:
void downloadFile() async {
ProgressManager.instance.showProgress();
for (int i = 0; i <= 100; i += 10) {
await Future.delayed(Duration(milliseconds: 200));
ProgressManager.instance.updateProgress(i / 100.0);
}
ProgressManager.instance.hideProgress();
}
3.3 自定义进度条
你可以自定义进度条的外观。例如,使用 LinearProgressIndicator 来显示进度:
void customProgress() async {
ProgressManager.instance.showProgress(
builder: (context, progress) {
return LinearProgressIndicator(value: progress);
},
);
for (int i = 0; i <= 100; i += 10) {
await Future.delayed(Duration(milliseconds: 200));
ProgressManager.instance.updateProgress(i / 100.0);
}
ProgressManager.instance.hideProgress();
}
4. 在 UI 中使用
你可以在任何需要的地方调用 ProgressManager 的方法来显示或隐藏进度。例如,在按钮点击事件中:
ElevatedButton(
onPressed: () {
loadData();
},
child: Text('Load Data'),
),
5. 处理错误
在任务执行过程中,如果发生错误,你可以使用 ProgressManager 来显示错误信息:
void loadDataWithError() async {
ProgressManager.instance.showProgress();
try {
// 模拟一个可能出错的任务
await Future.delayed(Duration(seconds: 2));
throw Exception('Something went wrong');
} catch (e) {
ProgressManager.instance.showError(e.toString());
} finally {
ProgressManager.instance.hideProgress();
}
}
6. 自定义错误显示
你可以自定义错误信息的显示方式:
void customError() async {
ProgressManager.instance.showProgress();
try {
// 模拟一个可能出错的任务
await Future.delayed(Duration(seconds: 2));
throw Exception('Something went wrong');
} catch (e) {
ProgressManager.instance.showError(
e.toString(),
builder: (context, error) {
return AlertDialog(
title: Text('Error'),
content: Text(error),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('OK'),
),
],
);
},
);
} finally {
ProgressManager.instance.hideProgress();
}
}

