如何用Future Http Post的结果显示Snackbar?

问题描述

我正在尝试获取文件上传”。从成功的Future HTTP发布请求返回字符串,以便我可以创建SnackBar,但从返回中得到的全部是null。这是调用Future;

的按钮
IconButton(

    icon: Icon(TriangleAll.upload_3,),onpressed: () async {

    replyresult = await uploadReply(
    filepath: _current.path);
)

 if (replyresult != null){

 print(replyresult);

    }
  }
)

这是未来的代码

Future<String> uploadReply(    

    }) async {

  final serverurl = "http://example.com/example.PHP";
  final filepath = "examplefilepath";
  String serverResponse;

  var request = http.MultipartRequest('POST',Uri.parse(serverurl));

  var multipartfile = await http.multipartfile.fromPath("audio",filepath,contentType: MediaType("audio","mp4"));
      request.files.add(multipartfile);
      request.send().then((result) async {

    http.Response.fromStream(result).then((response) {
      if (response.statusCode == 200) {
        serverResponse = response.body;
        print(serverResponse);
        return serverResponse ;
      }
    });
  });
}

我正在尝试使用replyresult变量在成功的200服务器响应后创建snackbar。我知道发布成功,因为我可以在控制台中看到正确打印的serverResponse

我只是想做;

return response.body ;

但是在replyresult变量上我仍然为空。

解决方法

因为方法在响应到达Future之前就返回了,所以这样做

var response = await http.Response.fromStream(result);
if (response.statusCode == 200) {
        serverResponse = response.body;
        print(serverResponse);
        return serverResponse ;
} else return '';

或在未来之前的await

,

这是有效的。

 var multiPartFile = await http.MultipartFile.fromPath("audio",filepath,contentType: MediaType("audio","mp4"));
  request.files.add(multiPartFile);

  final response = await http.Response.fromStream(await request.send());
  String serverResponse;

  if (response.statusCode == 200) {
    String serverResponse = response.body;
    print(serverResponse);
    return serverResponse;
      }