Увольнение AlertDialog во флаттере
У меня есть простое приложение Flutter со списком элементов, которые загружаются из базы данных Firebase (Cloud Firestore).
Как видите - есть кнопка для добавления элементов и каждый элемент может быть удален или отредактирован. Когда я нажимаю кнопку редактирования для выбранного элемента, появляется AlertDialog с TextField, в котором пользователь TextField может видеть текущее имя элемента и редактировать его. У меня проблемы только с закрытием диалога после редактирования.
new IconButton(
icon: new Icon(Icons.edit, color: Colors.white),
onPressed: (){ showItemUpdateDialog(context, document); }
)
.......
void showItemUpdateDialog(BuildContext context, DocumentSnapshot item) {
String itemName = "";
var textContoller = new TextEditingController();
textContoller.text = item['name'];
var dialog = new AlertDialog(
title: new Text("item name"),
content: new TextField(
controller: textContoller,
onChanged: (value) {newName = value;},
),
actions: <Widget>[
new FlatButton(
child: Text("cancel"),
onPressed: (){
Navigator.pop(context);
},
),
new FlatButton(
child: Text("Update"),
onPressed: () {
updateItemOnServer(item, newName);
Navigator.pop(context);
}
)
],
);
showDialog(context: context, child: dialog);
}
Значение обновляется правильно, но AlertDialog не удаляется. Код ошибки ниже. Я думаю, что это связано с тем, что был вызван элемент, который был изменен и обновлен с сервера.
flutter: при обработке жеста было выдвинуто следующее утверждение: flutter: поиск предка деактивированного виджета небезопасен. flutter: На этом этапе состояние дерева элементов виджета больше не является стабильным. Чтобы безопасно ссылаться на предка flutter: виджета в его методе dispose(), сохраните ссылку на предка, вызвав flutter: inheritFromWidgetOfExactType() в методе widChangeDependencies() виджета.
3 ответа
Попробуй это,
Navigator.of(context, rootNavigator: true).pop(),
С последним использованием Flutter:
Navigator.of(context).pop();
вместо
Navigator.pop(context);
По какой-то причине он выскакивает дважды из стека при появлении диалога
Дайте мне знать, если это решит проблему!
Попробуй это,
Navigator.popUntil(context, ModalRoute.withName('/login'));