【发布时间】:2020-02-25 04:39:45
【问题描述】:
在 android 中,当您点击使用 showDialog() 创建的(材质)模态对话框的“屏障”/外部/背景时,对话框默认关闭。
当您在 iphone(物理设备)上点击该障碍物时,将忽略要关闭的点击,并且模式保持打开状态。
我意识到有一个“showCupertinoDialog”选项,但我试图避免使用它(它也不会点击障碍关闭)。
flutter/dart 文档没有表明 android -vs- ios 的预期行为有任何差异。我已经包含了一些说明该问题的示例代码,我希望 _showMaterialDialog() 对话框在 iphone 上关闭,但事实并非如此。
知道为什么这不起作用吗?这是一个错误还是预期的行为?谢谢!
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class dialogtest extends StatefulWidget {
@override
dialogtestState createState() => dialogtestState();
}
class dialogtestState extends State<dialogtest> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: Text('Dialog Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
onPressed: () {
_showMaterialDialog();
},
child: Text('Show Material Dialog'),
),
SizedBox(
height: 20,
),
RaisedButton(
onPressed: () {
_showCupertinoDialog();
},
child: Text('Show Cupertino Dialog'),
),
],
),
)));
}
void _showMaterialDialog() {
showDialog(
context: context,
barrierDismissible: true, // ********* ignored in ios, defaults to true anyway!!
builder: (context) {
return AlertDialog(
title: Text('Material Dialog'),
content: Text('This is the content of the material dialog'),
actions: <Widget>[
FlatButton(
onPressed: () {
_dismissDialog();
},
child: Text('Close')),
FlatButton(
onPressed: () {
print('HelloWorld!');
_dismissDialog();
},
child: Text('HelloWorld!'),
)
],
);
});
}
_dismissDialog() {
Navigator.pop(context);
}
void _showCupertinoDialog() {
showDialog(
context: context,
builder: (context) {
return CupertinoAlertDialog(
title: Text('Cupertino Dialog'),
content: Text('This is the content of the cupertino dialog'),
actions: <Widget>[
FlatButton(
onPressed: () {
_dismissDialog();
},
child: Text('Close')),
FlatButton(
onPressed: () {
print('HelloWorld!');
_dismissDialog();
},
child: Text('HelloWorld!'),
)
],
);
});
}
}
【问题讨论】: