在 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
在showDialog中Flutter Navigator.of(context).pop(),在ios中关闭整个应用程序