在Dart中返回Future时为Null [英] Null while returning a Future in Dart

查看:597
本文介绍了在Dart中返回Future时为Null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个类,一个 user_api_manager 和一个 base_api_manager 。从 user_api_manager 中,我调用 base_api_manager get 方法一个http get请求并返回 Future< String> 。已执行 get 请求,但是我没有将结果传递给我的 user_api_manager 类。回调结果始终为空。

I have two classes, a user_api_manager and a base_api_manager. From user_api_manager i call the get method of base_api_manager which performs an http get request and returns a Future<String>. The getrequest is performed but i am not pass the result to my user_api_manager class. The callback result is always null.

这是我的 user_api_manager.dart

static Future<Map<String,dynamic>> forgotPasswordAPI(String email) async{

String url = Constants.BASE_URL + Constants.FORGOT_PASSWORD_URL + email;

await BaseApiManager.get(url: url).then((val) {

  var response = JSON.decode(val);

  var status = response['status'];
  String message = '';
  print(response);
  switch (response['status']) {
    case Constants.SUCCESS:
      message = Constants.SUCCESS_RESPONSE;
      break;
    case Constants.SERVER_ERROR:
      message = Constants.SERVER_ERROR_MESSAGE;
      break;
    case Constants.UNAUTHORISED:
      message = Constants.UNAUTHORISED_MESSAGE;
      break;
  }
  return {'status':status,'message':message};
 });
}

这是我的 base_api_manager.dart

static Future<String> get({url : String,
parameters : Map ,
headers: Map }) async {
    var client = new http.Client();
    Map<String,dynamic> resultJSON;
    final c = new Completer();
    await client.get(url).then((response) {  //response is always null
    resultJSON  = {
        'status' : response.statusCode,
        'body' : JSON.decode(response.body)
    };
    c.complete(resultJSON.toString());
    return c.future;
  });
}

如何解决此问题?

推荐答案

将返回c.future移到响应处理之外,即您想从get中返回它,否则将返回空。

Move the return c.future outside of the response processing, i.e you want to return this from your get otherwise you will return null.

这篇关于在Dart中返回Future时为Null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆