0
点赞
收藏
分享

微信扫一扫

Flutter一个页面同时请求多个接口的并发请求-Future.await使用方法

认真的老去 2021-10-04 阅读 53
  • 我们在项目开发中的会遇到一个页面同时请求多个接口的情况,而且接口是同时发出的并发请求,正常接口请求一般都是通过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就是两个接口结果组成的数组,然后再进行数据的操作和页面的刷新
举报

相关推荐

0 条评论