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

How to Show Snackbar with the Result of Future Http Post?

我正在尝试获取“文件已上传”。从成功的 Future HTTP post 请求返回的字符串,以便我可以创建一个 SnackBar,但我从 return 返回的只是 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。我知道 post 是成功的,因为我可以在控制台中看到正确打印的 serverResponse

我试过简单地做;

return response.body ;

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

因为方法 returns 在响应到达 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;
      }