有时候,加载页面数据可能是一个接口,或者多个接口,这里就会出现各种各样的判断处理逻辑,代码看上去非常不好维护,作者在这方面也深有体会,在经过项目的锤炼,越来越简化,最终实现如下效果
provider:
class UserProvider extends BaseProvider<User> {
@override
Future? get dataFuture => Http.getUserData(); // 页面首次启动会请求该Future
@override
void initState() {
super.initState();
}
}
page:
class UserPage extends StatefulWidget {
@override
_UserPageState createState() => _UserPageState();
}
class _UserPageState extends State<UserPage>
with PagePresenter<UserPage, UserProvider> {
@override
Widget get buildWidget => Scaffold(
appBar: AppBar(
title: const Text('示例工程'),
),
body: Center(
child: dataSelector<String>(
selector: (__, _) => _.data.name, // _.data 为网络获取到的数据 , _ 为 UserProvider
builder: (BuildContext context, String value, Widget? child) => Text(
'用户名:$value',
textAlign: TextAlign.center,
),
)),
);
}
这里面脚手架已经帮大家处理了大部分的逻辑,例如加载过程中页面显示loading、加载成功后显示使用者声明的Widget、加载过程中出现网络错误页面显示重新加载,当控制的User 为一个List 时,返回了一个空列表,页面显示空数据等等,基本上是傻瓜式操作哦,使用者只关心需要显示什么内容即可,非常便捷
暂无评论内容