#flutter #dart
Вопрос:
Я отправляю форму на сервер, и форма успешно отправляется, а код результата возвращается, но по какой-то странной причине моя showsavingdialog
функция застряла при сохранении и не продолжает показывать форму сообщения, отправленную успешно. Что я делаю не так?
создать запись
Future<void> createEntry(
String id,
String formName,
String dataContent,
String dateCreated,
String dateUpdated,
String userLocation,
String imeI,
String updatedBy,
bool isNew) async {
debugPrint("createEntry web called");
String apiUrl = hostUrl "entry";
debugPrint("sending form to $apiUrl");
if (isNew) {
// creating new record
try {
Map<String, dynamic> data = {
"id": id,
"formName": formName,
"dateCreated": dateCreated,
"dataContent": dataContent,
"dateUpdated": dateUpdated,
"userLocation": "userLocation",
"imeI": "imeI",
"updatedBy": updatedBy,
"synced": true
};
var resp = await Dio().post(apiUrl, data: data);
int result = resp.statusCode;
if (result == 201) {
_showAlertDialog("Success", "Your form has been saved");
} else {
_showAlertDialog(
"Error", "Your form could not be saved due to an error");
}
} on DioError catch (e) {
debugPrint("$e");
debugPrint(e.message);
_showAlertDialog(
"Error", "Your form could not be saved due to an error");
} finally {
saving = false; // change save button back to "save"
}
}
функция сохранения
void _save() async {
debugPrint("_save() called");
saving = true; // switch save button to display "saving..."
setFacility();
isFormValid();
_showSavingDialog();
String uuid = this.dbForm.id == null ? Uuid().v4() : this.dbForm.id;
String op = this.dbForm.id == null ? "insert" : "update";
// create variables, then store in server
final String id = uuid;
final String formName = template.form_name;
final String dateCreated = DateTime.now().toString();
final String dateUpdated = DateTime.now().toString();
final String dataContent = encodeResponse();
final String updatedBy = username;
final String userLocation = "isAndroid";
final String imeI = "isAndroid" ;
// List<Future> futures = <Future>[];
if (op == "insert") {
await createEntry(id, formName, dataContent, dateCreated, dateUpdated,
userLocation, imeI, updatedBy, true);
} else {
await createEntry(id, formName, dataContent, dateCreated, dateUpdated,
userLocation, imeI, updatedBy, false);
}
}
диалоговое окно показать сохранение
void _showSavingDialog() {
AlertDialog saveDialog = AlertDialog(
content: Row(
children: <Widget>[
Padding(
child: SizedBox(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.black54),
),
height: 15.0,
width: 15.0),
padding: EdgeInsets.only(left: 15.0),
),
Padding(
child: Text(
"Saving...",
style: TextStyle(color: Colors.black54),
textAlign: TextAlign.center,
),
padding: EdgeInsets.all(15.0),
),
],
));
showDialog(
context: context,
builder: (_) => saveDialog,
barrierDismissible: false);
}
Я всегда получаю ошибку
Ошибка: Этот виджет был отключен, поэтому состояние больше не имеет контекста (и должно считаться несуществующим). Рассмотрите возможность отмены любой активной работы во время «удаления» или использования «смонтированного» геттера, чтобы определить, по-прежнему ли состояние активно.
и диалог сохранения застрял на сохранении, любая помощь будет оценена по достоинству
Комментарии:
1. Вы решили эту проблему?
2. Да, я dd @HaizadAnnuar, я буду искать исправление и обновление
3. @arriff итак, каково же было решение?
Ответ №1:
какая часть кода помечена ошибкой?
вы можете получить этот код внутри:
if (mounted) {
...
}