【发布时间】:2020-02-24 11:12:22
【问题描述】:
我在尝试在 Flutter 中获得对 POST 请求的正确响应时遇到了一些麻烦。这是我写的方法:
Future<void> processUnload(String code) async {
Map info = {
'code': "$code",
};
try {
var response = await http.post(
url + "/unload/code",
body: json.encode(info), headers: {
"Content-Type": "application/json",
"Authorization": "Bearer $token"
}
);
if (response.statusCode == 200) {
showUnloadOKMessage();
} else {
showUnloadNotOKMessage(response.body);
}
}catch (error) {
if (error.toString().contains("Failed host lookup")) {
notDelivered.add(OfflineCart(code, DateTime.now().toString()));
showOfflineUnloadMessage();
}
}
}
showUnloadOKMessage() {
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title:
Text('Unload OK.', style: TextStyle(color: Colors.green)),
actions: <Widget>[
FlatButton(
child: Text('OK', style: botonGrandeRojo),
onPressed: () {
Navigator.of(context).pop();
FocusScope.of(contextobuild).requestFocus(focusNode);
},
),
],
);
},
);
}
showUnloadNotOKMessage(String msg) {
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text(msg, style: TextStyle(color: Colors.red)),
actions: <Widget>[
FlatButton(
child: Text('OK', style: botonGrandeRojo),
onPressed: () {
Navigator.of(context).pop();
FocusScope.of(contextobuild).requestFocus(focusNode);
},
),
],
);
},
);
}
问题是,当发出 POST 请求时,我总是在得到实际和预期的 response.statusCode == 200 之前得到 4 或 5 个 response.statusCode == 400。因此,应用程序总是显示 4 或 5" Not OK 消息”,然后显示预期的“Unload OK”消息。
我已经阅读了很多 async/await/then 文章(Threading in Flutter、Using Futures Guide for Beginners、Flutter Async Loader),我很确定问题出在我编写代码的方式上,但我无法让它正常工作,因为我没有任何使用异步调用的经验。
谢谢。
【问题讨论】:
-
您发布的网址是什么?与
curl的行为相同吗?
标签: asynchronous flutter dart http-post