1.生命周期
当关联的Page 进行initState 或者 dispose , BaseProvider对应的方法也会同步进行
class IndexProvider extends BaseProvider {
@override
Future? get dataFuture => null;
@override
void initState() {
super.initState();
// 同步 State 的 initState
}
@override
void dispose() {
super.dispose();
// 同步 State 的 dispose
}
}
2.触发更新
当值发生改变时,我们需要调用update()触发更新,并在视图侧我们需要使用dataSelector或者dataBuilder进行包裹
class IndexProvider extends BaseProvider {
int count = 0;
@override
Future? get dataFuture => null;
void onAdd() {
count += 1;
update();
}
}
3.监听全局变量更新
监听全局变量,我们可以使用RProviderListener
然后实现listener
class IndexProvider extends BaseProvider with RProviderListener {
// ...
@override
void listener(Map<String, dynamic>? oldMap, Map<String, dynamic>? newMap) {
// oldMap 更新前
// newMap 更新后
}
}
4.请求网络
当我们需要请求网络时,可以使用fetch
方法
示例代码:
class IndexProvider extends BaseProvider {
// ...
void getUserInfo() {
fetch(BaseConfig.httpService.get('/userInfo', null),
onSuccess: (result) {
//获取成功,result 为得到的结果
},
onError: (int? statusCode, Object? error, StackTrace? stackTrace) {
//获取失败, statusCode 状态码, error错误信息, stackTrace栈
});
}
}
1.处理异常与错误
正常请求成功会回调onSuccess
方法,如果请求过程中出现错误会回调onError
方法,也可以自动处理这些错误而只处理onSuccess
,支持三种模式
- AutoHandler.Page 当出现错误时,通过页面处理错误,也就是关联的Widget显示错误
- AutoHandler.Toast 当出现错误时,使用Toast显示错误信息
- AutoHandler.Dialog 当出现错误时,使用Dialog 显示信息
示例代码:
class IndexProvider extends BaseProvider {
// ...
void getUserInfo() {
fetch(BaseConfig.httpService.get('/userInfo', null),
onSuccess: (result) {
//获取成功,result 为得到的结果
},
autoHandler: AutoHandler.Toast
);
}
}
2.添加加载loading弹框
在加载网络的过程中,如果想让用户感知正在请求网络,就需要加载loading 的弹框,我们在请求网络代码中只需多加一句即可
示例代码:
class IndexProvider extends BaseProvider {
// ...
void getUserInfo() {
fetch(BaseConfig.httpService.get('/userInfo', null),
onSuccess: (result) {
//获取成功,result 为得到的结果
},
autoHandler: AutoHandler.Toast,
loadingTip: '加载中...'
);
}
}
请求网络完成,即失败或者成功,都会自动取消loading弹框,如果不想取消弹框,我们可以设置参isAutoCancelLoading=false
示例代码:
class IndexProvider extends BaseProvider {
// ...
void getUserInfo() async{
await fetch(BaseConfig.httpService.get('/userInfo', null),
onSuccess: (result) {
//获取成功,result 为得到的结果
},
autoHandler: AutoHandler.Toast,
loadingTip: '加载中...',
isAutoCancelLoading: false
);
//处理其它请求
}
}
3.处理请求完最后操作
网络请求基本上介绍完了, 还剩一个onFinally
, 这里无论是请求失败或者成功,总会在后续调用,也可以在await fetch
之后执行所需代码
示例代码:
class IndexProvider extends BaseProvider {
// ...
void getUserInfo() async{
await fetch(BaseConfig.httpService.get('/userInfo', null),
onSuccess: (result) {
//获取成功,result 为得到的结果
},
autoHandler: AutoHandler.Toast,
loadingTip: '加载中...',
isAutoCancelLoading: false,
onFinally: (){
//1.执行完后处理
}
);
//2.处理其它请求
}
}
暂无评论内容