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