我是新手,我想在完成任务后解雇我的对话框。我试过了:
Navigator.pop(context, true);
但是我的屏幕变黑了,对话框还在那里。这是我的对话框代码。
Dialog _dialog = new Dialog(
child: new Row(
mainAxisSize: MainAsixSize.min,
children: <Widget> [
new CircularProgressIndicator(),
new Text("Loading")]),
);
答案 0 :(得分:14)
此代码对我有用:
BuildContext dialogContext;
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
dialogContext = context;
return Dialog(
child: new Row(
mainAxisSize: MainAxisSize.min,
children: [
new CircularProgressIndicator(),
new Text("Loading"),
],
),
);
},
);
await _longOperation();
Navigator.pop(dialogContext);
答案 1 :(得分:13)
如果showDialog
关闭后不想返回任何结果,则可以使用
Navigator.pop(context);
如果您要通过结果呼叫
Navigator.pop(context, result);
示例:
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: Text('Wanna Exit?'),
actions: [
FlatButton(
onPressed: () => Navigator.pop(context, false), // passing false
child: Text('No'),
),
FlatButton(
onPressed: () => Navigator.pop(context, true), // passing true
child: Text('Yes'),
),
],
);
}).then((exit) {
if (exit == null) return;
if (exit) {
// user pressed Yes button
} else {
// user pressed No button
}
});
答案 2 :(得分:7)
https://docs.flutter.io/flutter/material/showDialog.html说
此方法创建的对话框路径将推送到根导航器。如果应用程序有多个Navigator对象,则可能需要调用
Navigator.of(context, rootNavigator: true).pop(result)
来关闭对话框,而不仅仅是Navigator.pop(context, result)
。
所以我假设这两个中的一个应该做你想做的事。
答案 3 :(得分:6)
//it work conrrectly
onPressed: () {
Navigator.of(context, rootNavigator: true).pop();
},
答案 4 :(得分:5)
如果你不想在showDialog关闭后返回任何结果,可以使用它。
Navigator.pop(context);
如果你想传递结果调用。
Navigator.pop(context, result);
一个示例将包含如下代码片段:
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: Text('Wanna Exit?'),
actions: [
FlatButton(
onPressed: () => Navigator.pop(context, false), // passing false
child: Text('No'),
),
FlatButton(
onPressed: () => Navigator.pop(context, true), // passing true
child: Text('Yes'),
),
],
);
}).then((exit) {
if (exit == null) return;
if (exit) {
// user pressed Yes button
} else {
// user pressed No button
}
});
答案 5 :(得分:2)
这将关闭对话框/警报框
bow bow bow
the animal is speaking
The animal is sleeping
答案 6 :(得分:2)
通常Navigator.pop(context);
有用。
但是,如果应用程序具有多个Navigator对象,并且dialogBox没有关闭,请尝试执行此操作
Navigator.of(context, rootNavigator: true).pop()
如果您想通过结果通话,请尝试
Navigator.pop(context,result);
OR
Navigator.of(context, rootNavigator: true).pop(result)
答案 7 :(得分:1)
最好使用Completer,因为如果你的操作太短或者设备太慢,那么dialogContext变量不会被初始化,你也无法关闭对话框。
final dialogContextCompleter = Completer<BuildContext>();
showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext dialogContext) {
if(!dialogContextCompleter.isCompleted) {
dialogContextCompleter.complete(dialogContext);
}
return AlertDialog(
content: CircularProgressIndicator(),
);
},
);
// Close progress dialog
final dialogContext = await dialogContextCompleter.future;
Navigator.pop(dialogContext);