- 我们在项目开发中的会遇到一个页面同时请求多个接口的情况,而且接口是同时发出的并发请求,正常接口请求一般都是通过dio进行封装过后的,如下:
//创建数据请求
requestBannerListData(){
DioUtils.postHttp("student/banner/getPublicList", onSuccess: (data){
final bannerModel = bannerModelFromJson(jsonEncode(data));
_bannerList.clear();
_bannerList.addAll(bannerModel);
}, onError: (int code, String error) {
});
}
_getAllData() async{
await Future.wait<dynamic>([requestBannerListData(),requestVideoListData()]).then((value){
_isSuccessLoad = true;
_bannerList.clear();
_bannerList.addAll(value[0]);
_videoList.clear();
_videoList.addAll(value[1]);
ProgressDialog.hideProgress(this.context);
setState(() {
// 重置刷新状态
_controller.resetLoadState();
});
}).catchError((error){
});
}
//创建数据请求
requestBannerListData() async{
var result;
await Future(()=> DioUtils.postHttp("student/banner/getPublicList", onSuccess: (data){
final bannerModel = bannerModelFromJson(jsonEncode(data));
result = bannerModel;
}, onError: (int code, String error) {
}));
return result;
}
//创建数据请求
requestVideoListData() async{
//ProgressDialog.showProgress(context);
Map<String, dynamic> parma = {
"sectionId": "3",
"sortType": _sortId,
"page": 1,
"subjectId": _subjectId
};
var result;
await Future(()=> DioUtils.postHttp("trs/getVideos", parameters: parma, onSuccess: (data) {
final listmodel = videoListModelFromJson(jsonEncode(data));
result = listmodel;
}, onError: (int code, String error) {
}));
return result;
}
如上就完成了多接口的并发请求,当两个接口都请求成功拿到数据之后,Future.await的value就是两个接口结果组成的数组,然后再进行数据的操作和页面的刷新