我对AlertDialog有一个奇怪的问题,无法打开对话框。我正在使用下面的代码片段来关闭对话框,如flutter文档中所述。
Navigator.of(dialogContext).pop();
但是显示它如何不起作用,并使应用程序进入非活动模式并变成黑屏窗口。为了使其再次工作,我必须终止该应用程序并重新启动。
这是Flutter中的Alertdialog的完整代码
Future<Null> _showDialogContactDial(context, Contact contactRecord) async {
return showDialog<Null>(
context: context,
barrierDismissible: true, // user must tap button!
builder: (BuildContext dialogContext) {
return new AlertDialog(
title: new Text('Confirm Number'),
content: new SingleChildScrollView(
child: new ListBody(
children: <Widget>[
new TextFormField(
maxLines: 1,
decoration: new InputDecoration(hintText: 'Number'),
keyboardType: TextInputType.number,
autofocus: false,
initialValue: contactRecord.phoneNumber.number,
),
],
),
),
actions: <Widget>[
new FlatButton(
child: new Text(
'Call',
style: TextStyle(color: Colors.black),
),
onPressed: () {
Navigator.of(dialogContext).pop();
_launchURL(
context);
},
),
new FlatButton(
color: Colors.red,
child: new Text('Close', style: TextStyle(color: Colors.white)),
onPressed: () {
Navigator.of(dialogContext).pop();
},
),
],
);
},
);
}
我还注意到,它适用于一个按钮“呼叫”,没有任何问题,但不适用于“取消警报”对话框,就像您在两个按钮操作中的同一代码段中看到的那样。
答案 0 :(得分:0)
这在我的应用程序中有效,我对您的代码进行了很少的更改,希望这可能有所帮助,如果这对您没有帮助,那么我认为_launchURl方法存在问题。
void _showDialogContactDial(BuildContext context, Contact contactRecord){
showDialog<Null>(
context: context,
barrierDismissible: true, // user must tap button!
builder: (BuildContext dialogContext) {
return new AlertDialog(
title: new Text('Confirm Number'),
content: new SingleChildScrollView(
child: new ListBody(
children: <Widget>[
new TextFormField(
maxLines: 1,
decoration: new InputDecoration(hintText: 'Number'),
keyboardType: TextInputType.number,
autofocus: false,
initialValue: contactRecord.phoneNumber.number,
),
],
),
),
actions: <Widget>[
new FlatButton(
child: new Text(
'Call',
style: TextStyle(color: Colors.black),
),
onPressed: () {
Navigator.of(dialogContext).pop();
_launchURL(
context);
},
),
new FlatButton(
color: Colors.red,
child: new Text('Close', style: TextStyle(color: Colors.white)),
onPressed: () {
Navigator.of(dialogContext).pop();
},
),
],
);
},
); }
将此方法用作onTap或使用它的任何地方的回调。
答案 1 :(得分:0)
只需添加rootNavigator:true
Navigator.of(dialogcon, rootNavigator: true).pop();
答案 2 :(得分:0)
在对话框内部。用Builder包围您的平面按钮。
Builder(
builder: (context) => FlatButton(
child: Text('Cancelar'),
onPressed: () {
Navigator.of(context).pop();
},
),
),