如何解决如何用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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。