gpt4 book ai didi

flutter - flutter-在iOS中忽略了showDialog的barrierDismissible吗?

转载 作者:行者123 更新时间:2023-12-03 03:04:54 27 4
gpt4 key购买 nike

在android中,当您点击使用showDialog()创建的( Material )模态对话框的“障碍” /外部/背景时,默认情况下该对话框关闭。

当您在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!'),
)
],
);
});
}

}

最佳答案

我想通了,以防有人随机遇到这种行为。

创建项目时,我使用的是flutter 1.7(仅适用于android)。为了在点击文本框时支持文本框的“非聚焦”,我将整个项目包装在GestureDetector中,并附带以下说明:

https://flutter360.dev/dismiss-keyboard-form-lose-focus

一切正常。当我将应用程序移至Mac进行iOS测试时,我安装了v1.9.1 + hotfix.6随附的新版flutter。我猜是从1.7-> 1.9.1发生了变化,这打破了这种不受支持的实现。没有考虑到我的Windows / Android Flutter版本(在该版本中有效)与我的Mac / ios版本(在该版本中无效)之间的区别,我认为这是iOS的事情。将PC上的Flutter升级至1.9.1之后,对话框在Android手机上将不再可用。

我仍然需要/想要从文本字段中轻按以关闭键盘的方法。我正在从这里尝试使用Listener解决方案,到目前为止,该解决方案似乎正在按预期工作:

Flutter. A way for TextField to detect tap outside

我猜想这是对框架未提供的现成功能的创造性解决方案的副作用的练习,同时还要了解更新框架的影响。

关于flutter - flutter-在iOS中忽略了showDialog的barrierDismissible吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com