首页 > 解决方案 > 如何用未来 Http Post 的结果显示 Snackbar?

问题描述

我正在尝试获取“文件已上传”。从成功的 Future HTTP post 请求中返回字符串,以便我可以创建一个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变量来创建snackbar成功的 200 服务器响应。我知道帖子是成功的,因为我可以serverResponse在控制台中看到正确的打印内容。

我试图简单地做;

return response.body ;

但我仍然在replyresult变量处得到空值。

标签: flutterdartreturnhttp-postfuture

解决方案


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

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

await领先于Future。


推荐阅读