在 Flutter 中关闭 AlertDialog

Posted

技术标签:

【中文标题】在 Flutter 中关闭 AlertDialog【英文标题】:Dismissing AlertDialog in Flutter 【发布时间】:2018-10-23 04:11:39 【问题描述】:

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

如您所见 - 有用于添加项目的按钮,每个项目都可以删除或编辑。当我按下所选项目的编辑按钮时,会出现带有 TextField 的 AlertDialog,在此 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:此时widget的元素树的状态是no 更稳定。安全地引用颤振:小部件的祖先在其 dispose() 方法,通过调用flutter保存对祖先的引用: 小部件的 didChangeDependencies() 中的 inheritFromWidgetOfExactType() 方法。

【问题讨论】:

您解决了吗?如果有,怎么做? 你好@moonvader 你能帮帮我吗我想实现和你一样的功能这是我的问题:***.com/questions/61092208/… 【参考方案1】:

使用最新的 Flutter 使用:

Navigator.of(context).pop();

而不是

Navigator.pop(context);

由于某种原因,它在弹出 Dialog

时会从堆栈中弹出两次

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

【讨论】:

【参考方案2】:

试试这个,

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

【讨论】:

谢谢你!我的应用中有多个导航器,但我不明白为什么其他答案都不适合我。 @shanmugavel-gk 你能解释一下为什么会这样吗? 来自文档:如果 rootNavigator 设置为 true,则会给出来自此类最远实例的状态。用于将内容推送到所有后续 Navigator 实例之上。【参考方案3】:

试试这个,

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

【讨论】:

以上是关于在 Flutter 中关闭 AlertDialog的主要内容,如果未能解决你的问题,请参考以下文章

Android在ListView点击事件中关闭AlertDialog

防止对话框在 Flutter 中关闭外部触摸

在flutter中关闭endDrawer后如何运行功能

Flutter中关闭相机后的白屏/黑屏

Flutter中关闭应用程序时如何接收本地通知?

在showDialog中Flutter Navigator.of(context).pop(),在ios中关闭整个应用程序