在Dart中回归未来的时候是空的

时间:2018-03-07 05:48:20

标签: dart flutter

我有两个课程,user_api_managerbase_api_manager。从user_api_manager我调用get base_api_manager方法执行http get请求并返回Future<String>get请求已执行,但我没有将结果传递给我的user_api_manager类。回调结果始终为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;
  });
}

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

您可以简化代码。这应该可以更容易找到问题

static Future<String> get({url : String, parameters : Map, headers: Map }) async {
  var client = new http.Client();
  final response = await client.get(url);
  print(response.body);
  var resultJSON  = {
      'status' : response.statusCode,
      'body' : JSON.decode(response.body)
  };
  return resultJSON.toString()
}

该代码打印什么?