我目前正试图从一个打开的警报对话框导航回现有的屏幕。当我使用这段代码尝试这样做时,我被转回打开的警报对话框,但我希望它是关闭的,而不是在返回原屏幕时打开。
onPressed: () => Navigator.of(context).pop(),
我被转回了打开的警报对话框 但我希望它是关闭的,而不是在返回到原来的屏幕时打开。除了使用
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
CreatePost()));
这就是我目前被转回的:打开的对话框。
这里是提示对话框的代码。
AlertDialog(
contentPadding: EdgeInsets.all(5.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
content: Stack(
overflow: Overflow.visible,
children: <Widget>[
Positioned(
right: -40.0,
top: -40.0,
child: InkResponse(
onTap: () {
Navigator.of(context).pop();
},
child: CircleAvatar(
child: Icon(
Icons.close,
color: Colors.white,
),
backgroundColor: Colors.red,
maxRadius: 20.0,
),
),
),
我可以用这段代码导航回相应的屏幕,但是在多个屏幕使用相同的逻辑时,它的效果并不好。
Navigator.of(context) .push(MaterialPageRoute( builder: (context) => CampaignPage1())) .then((result) { Navigator.of(context).pop();
你可以尝试像这样调用Alert Dialog。
class FancyAlertDialog {
static showFancyAlertDialog(
BuildContext context,
String title,
String message, {
bool dismissable = false,
Icon icon,
String labelPositiveButton,
String labelNegativeButton,
VoidCallback onTapPositiveButton,
VoidCallback onTapNegativeButton,
}) {
return showDialog(
context: context,
barrierDismissible: dismissable,
child: Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(12.0),
),
),
child: Wrap(
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12.0),
topRight: Radius.circular(12.0),
),
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 5.0),
child: Stack(
children: <Widget>[
Align(
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
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: khomeStyle.copyWith(
color: Colors.black, fontSize: 16)),
),
SizedBox(height: 8.0),
Text(message,
textAlign: TextAlign.center,
style: khomeStyle.copyWith(
color: Colors.black,
fontSize: 13,
fontWeight: FontWeight.w300)),
SizedBox(height: 16.0),
Row(
mainAxisAlignment: MainAxisAlignment.center,
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),
Center(
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(16.0),
),
),
color: kOrange,
child: Text(
labelPositiveButton.toUpperCase(),
style: TextStyle(
color: Colors.white,
),
),
onPressed: onTapPositiveButton,
),
),
],
)
],
),
),
],
),
),
);
}
}
当你想调用这个Alert Dialog时,你可以这样调用它。
FancyAlertDialog.showshowFancyAlertDialog(*Supply your arguments here*)
当你调用该对话框时,你可以像这样调用 Navigator.pop(context)
函数,作为参数调用警报对话框。
FancyAlertDialog.showshowFancyAlertDialog(
...
onTapPositiveButton: () {
Navigator.pop(context);
print('tap positive button');
},
)
这两个按钮的文字和功能可以在调用时指定。