如何解除FlatButton点击上的AlertDialog?

Gus*_*ash 32 flutter

我有以下内容AlertDialog.

showDialog(
            context: context,
            child: new AlertDialog(
              title: const Text("Location disabled"),
              content: const Text(
                  """
Location is disabled on this device. Please enable it and try again.
                  """),
              actions: [
                new FlatButton(
                  child: const Text("Ok"),
                  onPressed: _dismissDialog,
                ),
              ],
            ),
        );
Run Code Online (Sandbox Code Playgroud)

我怎么能_dismissDialog()解雇说AlertDialog

Col*_*son 67

Navigator.pop()应该做的伎俩.您还可以使用它来返回对话框的结果(如果它向用户显示了选项)

  • 谢谢,这很有效.调用Navigator.pop()会按预期关闭对话框.我当前的onPressed如下:`onPressed :()=> Navigator.pop(context),` (4认同)

Abd*_*ؤمن 26

Navigator.of(context, rootNavigator: true).pop('dialog')
Run Code Online (Sandbox Code Playgroud)

和我一起工作

  • 接受的答案导致我的整个页面消失,这是隐藏对话框的正确答案 (7认同)
  • 这是关闭对话框的更好方法,我正在尝试上述解决方案,但它弹出了我的另一个视图。 (7认同)
  • 接受的答案也导致我的页面消失,这是隐藏对话框的正确答案。 (3认同)

sul*_*rza 9

Navigator.of(dialogContext).pop()否则,如果您从“主”页面导航到“详细信息”页面,则可以关闭页面

                showDialog(
                  context: context,
                  builder: (dialogContext) {
                    return Dialog(
                      child: Column(
                        children: [
                          Text("Content"),
                          RaisedButton(
                            onPressed: () => Navigator.of(dialogContext).pop(),
                            child: Text("Close"),
                          )
                        ],
                      ),
                    );
                  },
                );
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 7

您可以使用以下任何一种:

Navigator.of(context).pop();
Navigator.pop(context);
Run Code Online (Sandbox Code Playgroud)


jit*_*555 6

单击平面按钮时关闭警报对话框的示例

RaisedButton(
        onPressed: () {
          showDialog(
              context: context,
              builder: (context) => AlertDialog(
                    title: Text('Are you sure?'),
                    content: Text('Do you want to remove item?'),
                    actions: <Widget>[
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(false),//  We can return any object from here
                           child: Text('NO')),
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(true), //  We can return any object from here
                          child: Text('YES'))
                    ],
                  )).then((value) =>
              print('Selected Alert Option: ' + value.toString()));
        },
        child: Text('Show Alert Dialog'),
      ),
Run Code Online (Sandbox Code Playgroud)

上面的代码有两个独特的东西,用于提供对话框的回调结果

Navigator.of(context).pop(false) -- 当我们按下 NO 时返回 false 值 Navigator.of(context).pop(true) -- 当我们按下 YES 时返回 true 值

基于这些返回值,我们可以在它之外执行一些操作或维护对话框状态值


Vic*_*khe 6

一般来说 Navigator.pop(context);有效。

但是如果应用程序有多个 Navigator 对象并且dialogBox没有关闭,那么试试这个

Navigator.of(context, rootNavigator: true).pop();
Run Code Online (Sandbox Code Playgroud)

如果要传递结果调用,请尝试

Navigator.pop(context,result);
Run Code Online (Sandbox Code Playgroud)

或者

Navigator.of(context, rootNavigator: true).pop(result)
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案 (2认同)

Bry*_*son 5

Navigator.pop(_)
Run Code Online (Sandbox Code Playgroud)

为我工作,但Flutter团队的图库包含使用以下示例:

Navigator.of(context, rootNavigator: true).pop()
Run Code Online (Sandbox Code Playgroud)

这也有效,我很想效仿他们的领导。