首页 文章

在Flutter中解除AlertDialog

提问于
浏览
0

我有一个简单的Flutter应用程序,其中包含从Firebase数据库(Cloud Firestore)加载的项目列表 .

enter image description here

如您所见 - 有添加项目的按钮,每个项目都可以删除或编辑 . 当我按下所选项目的编辑按钮时,会出现带有TextField的AlertDialog,在此TextField用户中可以看到当前项目名称并进行编辑 . I have problems only with dismissing dialog after editing.

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:此时窗口小部件元素树的状态不再稳定 . 要在dispose()方法中安全地引用flutter:widget的祖先,请通过在widget的didChangeDependencies()方法中调用flutter:inheritFromWidgetOfExactType()来保存对祖先的引用 .

3 回答

  • 0

    使用 latest Flutter

    Navigator.of(context).pop();
    

    代替

    Navigator.pop(context);
    

    出于某种原因,它在弹出 Dialog 时会从堆栈中弹出两次

    如果这解决了问题,请告诉我!

  • 0

    试试这个,

    Navigator.of(context, rootNavigator: true).pop(),
    
  • 0

    试试这个,

    Navigator.popUntil(context, ModalRoute.withName('/login'));
    

相关问题