问答

Flutter项目中使用异步请求api,如何获取并使用返回的数据?

作者:admin 2021-04-16 我要评论

问题描述 我在一个flutter项目中,使用异步请求api,并且用async函数封装,返回的是一个FutureClassResponseData FutureClassResponseData getTimeTableFromStud...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题描述

我在一个flutter项目中,使用异步请求api,并且用async函数封装,返回的是一个Future<ClassResponseData>

Future<ClassResponseData> getTimeTableFromStudentID(
    String studentId, String token) async {
  Options options = Options(headers: {HttpHeaders.authorizationHeader: token});
  Response response = await Dio()
      .post(
          "${StackConfig.ApiUrlHead}/api/pc/${StackConfig.ApiVersion}/timetables/getTimeTableFromStudentID",
          data: {"student_id": studentId, "year": "2020-2021", "semester": 1},
          options: options)
      .catchError((e) {
    print(e);
  });
  if (response != null) {
    return ClassResponseData.fromJson(response.data);
  } else {
    return null;
  }
}

我如何获取到Future<ClassResponseData>中的ClassResponseData,并赋值给一个变量?

尝试过的方法

创建一个类,用于获取Future里的数据

class ResponseDataFromAsync {
  ClassResponseData _data;
  String studentId;
  String token;

  ResponseDataFromAsync(this.studentId, this.token);

  set Class_data(ClassResponseData value) {
    //报错:Expected a value of type 'ClassResponseData', but got one of type '_Future<ClassResponseData>'
    //this._data = setData(this.studentId, this.token) as ClassResponseData;
    
    //报错:this._data=null;
    setData(this.studentId, this.token).then((data) {
      this._data = data;
    });
  }

  ClassResponseData get Class_data {
    return _data;
  }

  Future<ClassResponseData> setData(String studentId, String token) async {
    return await getTimeTableFromStudentID(studentId, token);
  }
}

还是无法解决

###

虽然对 Dart 不是很熟,但是猜想和 JS 差不多:

Future<ClassResponseData> setData(String studentId, String token) async {
    this._data = await getTimeTableFromStudentID(studentId, token);
}

不过此时 setData 没有返回值,所以要修改 <ClassResponseData> 这个类型

###

ClassResponseData result = await setData(String studentId, String token);
或者
ClassResponseData result;
setData(String studentId, String token).then(ClassResponseData data) {
result = data;
};

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器