Я сделал заявление для компании, в которой я работаю, приложение работает и решило некоторые проблемы, но код беспорядок, так как я не официальный программист, и это мое самое первое приложение. Теперь я пытаюсь улучшить код.
Проблема здесь в том, что я не знаю, как проверить, была ли публикация http успешной.
В приведенном ниже коде вы можете видеть, что я сделал некоторая обработка ошибок, но она не работает должным образом. Например, если приложение не получит сообщение «ОК» от сервера, оно вернет ошибку, но если inte rnet не работает, оно не вернет ошибку, потому что оно будет пытаться отправить сообщение навсегда. Я хотел бы всегда проверять, была ли публикация успешной, и уведомлять пользователя или показывать ошибку после некоторого времени попытки (например, 2 секунды, я не знаю), каков наилучший способ решить эту проблему?
Любой другие советы по улучшению кода приветствуются.
if ((_usuarioController.text.isEmpty) ||
(_placaController.text.isEmpty) ||
(_boxController.text.isEmpty) ||
(dropdownValue1 == "Vehicle type")) {
Toast.show(
"\n Complete all fields \n",
context,
duration: Toast.LENGTH_LONG,
gravity: Toast.CENTER,
backgroundRadius: 5.0,
);
} else if (_pecasList.length < 1) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("Empty List"),
actions: <Widget>[
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
}),
]);
});
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("Send the items?"),
actions: <Widget>[
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
}),
new FlatButton(
child: new Text("Send"),
onPressed: () async {
Map<String, dynamic> newDados = Map();
newDados["usuario"] = _usuarioController.text.trimLeft();
newDados["placa"] = _placaController.text.trimLeft();
newDados["box"] = _boxController.text.trimLeft();
newDados["tipo_veiculo"] = dropdownValue1;
_dadosList.add(newDados);
print(_pecasList + _dadosList);
Map<String, String> headers = new Map<String, String>();
headers["Content-type"] = "application/json";
headers["Accept"] = "application/json";
//String str = '{"take":55, "skip":"0"}';
final resp = await http.post('http://' + ipServidor,
body: jsonEncode(_dadosList +
_pecasList), //+ jsonEncode(_pecasList),
headers: headers);
print(resp.statusCode);
_dadosList
.clear(); //Cleans the list
print(resp.body);
if (resp.statusCode == 200) {
if (resp.body == "ok") {
setState(() {
print(_pecasList);
_pecasList.clear();
_placaController.clear();
_boxController.clear();
dropdownValue1 = "Vehicle type";
Navigator.of(context).pop();
});
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text(
"Error"),
actions: <Widget>[
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
Navigator.of(context).pop();
}),
]);
});
}
} else {
print("communication error");
Navigator.of(context).pop();
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("communication error"),
actions: <Widget>[
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
}),
]);
});
}
})
],
);
},
);
}
}```