Flutter 如何在Flatter中关闭警报对话框?

Flutter 如何在Flatter中关闭警报对话框?,flutter,dart,popup,Flutter,Dart,Popup,我正在为我的应用程序中的弹出窗口使用警报对话框。当触发onTap时,会调用弹出窗口。但是,当我按下“取消”按钮时,弹出窗口不会关闭,弹出窗口后面的整个屏幕变黑。 这是我弹出窗口的代码 import 'package:flutter/material.dart'; class FancyAlertDialog { static showFancyAlertDialog( BuildContext context, String title, String messa

我正在为我的应用程序中的弹出窗口使用警报对话框。当触发onTap时,会调用弹出窗口。但是,当我按下“取消”按钮时,弹出窗口不会关闭,弹出窗口后面的整个屏幕变黑。 这是我弹出窗口的代码

import 'package:flutter/material.dart';

class FancyAlertDialog {

  static showFancyAlertDialog(
    BuildContext context,
    String title,
    String message,
     {
    bool dismissable = true,
    Icon icon,
    @required String labelPositiveButton,
    @required String labelNegativeButton,
    @required VoidCallback onTapPositiveButton,
    @required VoidCallback onTapNegativeButton,
  }) {
    assert(context != null, 'context is null!!!');
    assert(title != null, 'title is null!!!');
    assert(message != null, 'message is null!!!');
    assert(labelPositiveButton != null, 'labelPositiveButton is null');
    assert(labelNegativeButton != null, 'labelNegativeButton is null');
    assert(onTapPositiveButton != null, 'onTapPositiveButton is null');
    assert(onTapNegativeButton != null, 'onTapNegativeButton is null');
    return showDialog(
      context: context,
      barrierDismissible: dismissable,
      child: Dialog(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(
            Radius.circular(4.0),
          ),
        ),
        child: Wrap(
          children: <Widget>[
            Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(4.0),
                  topRight: Radius.circular(4.0),
                ),
                color:Colors.red,
              ),
              padding: EdgeInsets.symmetric(vertical: 5.0),
              child: Stack(
                children: <Widget>[
                  Align(
                    child: icon ?? Container(height:0),
                    alignment: Alignment.topRight,
                  )
                ],
              ),
            ),
            Padding(
              padding: EdgeInsets.only(
                left: 16.0,
                top: 2.0,
                right: 16.0,
                bottom: 8.0,
              ),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: <Widget>[
                  Center(
                    child: Text(
                      title,
                      style: Theme.of(context).textTheme.subtitle,
                    ),
                  ),
                  SizedBox(height: 8.0),
                  Text(
                    message,
                    textAlign: TextAlign.center,
                    style: Theme.of(context).textTheme.caption,
                  ),
                  SizedBox(height: 16.0),
                  Row(
                    children: <Widget>[
                      Expanded(
                        child: RaisedButton(
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.all(
                              Radius.circular(16.0),
                            ),
                          ),
                          color: Colors.grey,
                          child: Text(
                            labelNegativeButton.toUpperCase(),
                            style: TextStyle(
                              color: Colors.white,
                            ),
                          ),
                          onPressed: onTapNegativeButton,
                        ),
                      ),
                      SizedBox(width: 16.0),
                      Expanded(
                        child: RaisedButton(
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.all(
                              Radius.circular(16.0),
                            ),
                          ),
                          color: Colors.red,
                          child: Text(
                            labelPositiveButton.toUpperCase(),
                            style: TextStyle(
                              color: Colors.white,
                            ),
                          ),
                          onPressed: onTapPositiveButton,
                        ),
                      ),
                    ],
                  )
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}
这是我按下“取消”按钮时屏幕的外观:

我假设您在调用
Navigator.pop(context)
时使用了错误的
context
对象。 此时,导航器还没有意识到该对话框

首先,在
showDialog
中提供一个新的
BuildContext
。有两种方法可以做到这一点:

  • showDialog
    函数中为
    子项
    参数(现在是
    对话框
    )创建一个新的小部件
  • 用提供新的
    BuildContext
然后您应该将新的
context
发送到
Navigator.pop(context)
调用。同样,有两种方法可以做到这一点:

  • 从对话框本身中弹出
  • 将上下文对象作为参数传递给
    onTapPositiveButton
    onTapNegativeButton
有关
Builder
的更多信息也可以在此处找到:

在您的onTap()中尝试此操作:

Navigator.of(上下文,rootNavigator:true).pop()

尝试使用此

onTap: () => Navigator.of(context).pop(false),

我应该在哪里传递这个?我的意思是
child
参数已被弃用,但不管怎样,我还是按原样运行您的代码(没有任何更改)它工作正常-单击
取消
确定
后,对话框将关闭。请允许我检查onTap中随弹出窗口传递的其他参数,如果不是弹出窗口导致问题,请尝试查看出了什么问题。谢谢你的帮助!
onTap: () => Navigator.of(context).pop(false),