Увольнение AlertDialog во флаттере - PullRequest
0 голосов
/ 13 мая 2018

У меня есть простое приложение Flutter со списком элементов, которые загружаются из базы данных Firebase (Cloud Firestore).

enter image description here

Как вы можете видеть - тамявляется кнопкой для добавления элементов, и каждый элемент может быть удален или отредактирован.Когда я нажимаю кнопку редактирования для выбранного элемента, появляется 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 ]

0 голосов
/ 21 августа 2018

Попробуйте это,

 Navigator.of(context, rootNavigator: true).pop(),
0 голосов
/ 21 августа 2018

Попробуйте,

Navigator.popUntil(context, ModalRoute.withName('/login'));
0 голосов
/ 13 мая 2018

С последним флаттером :

Navigator.of(context).pop();

вместо

Navigator.pop(context);

По какой-то причине он выскакивает дважды из стека при выводе Диалог

Дайте мне знать, если это решит проблему!

...