Flutter AlertDialog Navigator黑屏问题

时间:2018-12-07 17:39:04

标签: android mobile dart flutter flutter-layout

我对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();
            },
          ),
        ],
      );
    },
  );
}

我还注意到,它适用于一个按钮“呼叫”,没有任何问题,但不适用于“取消警报”对话框,就像您在两个按钮操作中的同一代码段中看到的那样。

dialog after the dialogdismiss app 帮助将不胜感激。

3 个答案:

答案 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();
            },
          ),
        ),