如何显示Snackbar与未来HttpPost的结果



我正试图获得一个"文件已上载"从一个成功的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变量在成功的200服务器响应后创建snackbar。我知道这篇文章是成功的,因为我可以在控制台中看到正确打印的serverResponse

我试着简单地做;

return response.body ;

但我在replyresult变量处仍然为null。

因为该方法在响应到达Future之前返回,所以执行此

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

或者在Future之前的单个CCD_ 9。

这就是工作原理。

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;
}

最新更新