首页 > 解决方案 > 我如何从飞镖的未来获得价值并将其存储到全局变量

问题描述

我从未来的响应中分配变量类级别变量,但它将返回 null

getRequest(urlPath).then((value) => {response = value.data.toString()});

其中响应是类级别的变量有数据但仍然响应为空

Future<Response> getRequest(String url) async {
return await m_basicDioConnection.getConnection().get(url);

}

HttpService 类

class HttpService {
BasicDioConnection m_basicDioConnection;
HttpService() {
m_basicDioConnection = new BasicDioConnection();
}

Future<Response> getRequest(String url) async {
return await m_basicDioConnection.getConnection().get(url);
}

Future<Response> postRequest(String url, String data) async {
return await m_basicDioConnection.getConnection().post(url, data: data);
}

Future<Response> putRequest(String url, String data) async {
return await m_basicDioConnection.getConnection().put(url, data: data);
}
}



class HttpServiceHandler extends HttpService {
String m_response;

set response(String resp) {
 this.m_response = resp;
}

String get response {
 return m_response;
}

String handleRequest(RequestEnumType method, String urlPath, String data) {
String resp;
switch (method) {
  case RequestEnumType.GET:
    getRequest(urlPath)
        .then((value) => {this.response = value.data.toString()});
    break;
  case RequestEnumType.POST:
    postRequest(urlPath, data)
        .then((value) => {this.response = value.data.toString()});
    break;
  case RequestEnumType.PUT:
    putRequest(urlPath, data)
        .then((value) => {this.response = value.data.toString()});
    break;
  case RequestEnumType.DELETE:
    break;
}
print(this.m_response);
return this.response;

} }

主功能

void main() {

HttpServiceHandler service = HttpServiceHandler();
String res = service.handleRequest(RequestEnumType.POST, "/api/users",
  "{\"name\":\"hello\",\"job\":\"cenaCenacena\"}");
print(res);
}

打印(分辨率);打印空

标签: flutterdartdio

解决方案


改变你的handleRequest方法应该有效。

Future<String> handleRequest(RequestEnumType method, String urlPath, String data) {
String resp;
switch (method) {
  case RequestEnumType.GET:
    resp = await getRequest(urlPath);
    break;
  case RequestEnumType.POST:
    resp = await postRequest(urlPath, data);
    break;
  case RequestEnumType.PUT:
    resp = await putRequest(urlPath, data);
    break;
  case RequestEnumType.DELETE:
    break;
}
this.response = resp.data.toString();
print(this.m_response);
return this.response;
}

您还需要更改此部分,如下所示:

Future<void> main() async {

HttpServiceHandler service = HttpServiceHandler();
String res = await service.handleRequest(RequestEnumType.POST, "/api/users",
  "{\"name\":\"hello\",\"job\":\"cenaCenacena\"}");
print(res);
}

推荐阅读