Flutter加载状态管理插件pd_load_state的使用
Flutter加载状态管理插件pd_load_state的使用
这是一个针对网络请求的不同状态对应的UI页面封装,对某一个widget
快速添加不同请求状态的UI页面,方便快速开发。
安装
要使用此包,请将以下内容添加到您的pubspec.yaml
文件中:
dependencies:
pd_load_state: ^<last version>
执行以下命令以获取依赖项:
flutter pub get
用法
对于使用示例参考/example
文件夹中的代码。
引用pd_load_state
库:
import 'package:pd_load_state/pd_load_state.dart';
简单的使用
// 如果想让这个组件展示加载状态,可以按照下面的方式实现。
class SimpleExample extends StatefulWidget {
const SimpleExample({super.key});
@override
State<SimpleExample> createState() => _SimpleExampleState();
}
class _SimpleExampleState extends State<SimpleExample> {
// 初始化组件状态控制对象
// 控制对象默认会执行加载中状态.
final PDLoadState loadState = PDLoadState('SimpleExample');
@override
Widget build(BuildContext context) {
// 使用[PDLoadStateLayout]包裹某一个组件.
return PDLoadStateLayout(
// 必传 绑定的[PDLoadState] 用来控制组件的状态切换。
loadState: loadState,
// 在加载状态时执行的回调, 在这里发送网络请求.
onLoading: network,
// 必传 加载状态成功时要执行的函数, 返回一个要展示的ui组件。
builder: (context) {
return const Center(
child: Text('Simple example'),
);
},
);
}
/// 模仿一次网络请求。
void network() {
Future.delayed(const Duration(seconds: 3)).then((_) {
if (Random().nextBool()) {
// 模拟请求成功, loadState.success() 会让页面回到加载成功状态
// 默认情况下 每次调用这个函数都会刷新[PDLoadStateLayout]包裹的组件
loadState.success();
} else {
loadState.error();
}
});
}
}
组件状态控制对象说明
// 初始化组件状态控制对象
// 控制对象默认会执行加载中状态.
final PDLoadState loadState = PDLoadState('SimpleExample');
// 状态枚举属性
loadState.state;
// 如果是请求错误时的自定义错误文本
loadState.errorMessage;
// 控制对象的身份标识, 用来区分多个组件的状态切换
loadState.identifier;
// 是否刷新[PDLoadStateLayout]包裹的组件.
// 为`true`时, 每次调用函数`loadState.success();`都会刷新[PDLoadStateLayout]包裹的组件
loadState.isRefreshSubviews;
如何切换页面的不同状态?
// 调用函数切换
// 网络请求成功
loadState.success();
// 网络请求失败
loadState.error();
// 网络请求加载中
loadState.loading();
或者用状态枚举直接赋值,内部重写了status
的set
方法实现刷新:
set status(PDLoadStateEnum newValue) {
_update(newValue);
}
// 网络请求成功
loadState.state = PDLoadStateStatus.success;
// 网络请求失败
loadState.state = PDLoadStateStatus.error;
// 网络请求加载中
loadState.state = PDLoadStateStatus.loading;
loadState.state = PDLoadStateStatus.reload; // 重新加载
各个状态页面的UI级别说明
示例 Example loadingWidget
通过[PDLoadStateLayout]
类中参数loadingWidgetBuilder
设置的UI,优先级最高:
PDLoadStateLayout(
loadState: loadState,
onLoading: network,
builder: (context) {
return const Center();
},
/// 优先级最高
loadingWidgetBuilder: (context) {
return const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text('loading...'),
],
),
);
},
)
PdLoadStateConfigure
类配置,设置一次全局使用。优先级中等:
/// 自定义加载中页面
PdLoadStateConfigure.instance.loadingWidgetBuilder = (context) {
return SizedBox(
width: MediaQuery.of(context).size.width,
child: const Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
Text('加载中...'),
],
),
),
);
};
如果上面两种都没有设置,则使用默认加载中页面,优先级最低:
PDLoadStateDefaultWidgets(backgroundColor: backgroundColor).loadingView;
更多关于Flutter加载状态管理插件pd_load_state的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加载状态管理插件pd_load_state的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用pd_load_state
插件进行加载状态管理的代码示例。这个插件通常用于处理异步数据加载,并在UI中显示相应的加载、成功或错误状态。
首先,确保你已经在pubspec.yaml
文件中添加了pd_load_state
依赖:
dependencies:
flutter:
sdk: flutter
pd_load_state: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来获取依赖。
接下来是一个完整的示例,展示如何使用pd_load_state
进行状态管理:
import 'package:flutter/material.dart';
import 'package:pd_load_state/pd_load_state.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(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _pdLoadController = PdLoadController();
@override
void initState() {
super.initState();
_fetchData();
}
@override
void dispose() {
_pdLoadController.dispose();
super.dispose();
}
Future<void> _fetchData() async {
// 模拟异步数据加载
await Future.delayed(Duration(seconds: 2));
// 模拟数据加载成功
_pdLoadController.successData("Data Loaded Successfully!");
// 如果想模拟加载失败,可以使用下面的代码代替上面的successData调用
// _pdLoadController.errorState("Failed to load data");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('pd_load_state Demo'),
),
body: Center(
child: PdLoadStateBuilder<String>(
controller: _pdLoadController,
builder: (context, state) {
if (state is PdLoadStateSuccess<String>) {
return Text(state.data!);
} else if (state is PdLoadStateLoading) {
return CircularProgressIndicator();
} else if (state is PdLoadStateError) {
return Text(state.message ?? "An unknown error occurred");
} else {
return Container(); // 默认状态,通常不会发生
}
},
),
),
);
}
}
代码解释:
- 依赖添加:在
pubspec.yaml
中添加pd_load_state
依赖。 - 控制器初始化:在
_MyHomePageState
类中初始化PdLoadController
。 - 数据加载:在
initState
方法中调用_fetchData
函数模拟异步数据加载。使用Future.delayed
模拟网络延迟。 - 状态处理:使用
PdLoadStateBuilder
根据加载状态显示不同的UI组件。- 成功状态:显示加载的数据。
- 加载状态:显示
CircularProgressIndicator
。 - 错误状态:显示错误信息。
- 资源释放:在
dispose
方法中释放PdLoadController
资源。
这样,你就可以在Flutter应用中轻松地使用pd_load_state
插件进行加载状态管理了。