我是新手来讨论开发,并且当你有一个导航抽屉时,在iOS中发现它有点令人沮丧,当你滑动打开它时,它会执行一个Navigation.of(context).pop().我想在iOS中禁用这种"轻扫到弹出"行为.我一直在阅读文档,但没有太多运气.
我确实看到了一些被称为WillPopScope诀窍的东西(这里有github问题),但我不能100%确定这是否是"正确"的方法(看起来太复杂了......)应该更容易......就像根应用程序上的设置一样).
小智 21
我还有一点要补充。我只是在解决这个问题,但我也需要我的用户能够通过按下 AppBar 上的“原生”后退按钮返回(不想因为这个而重新实现 AppBar),我发现了这个利基小标志:userGestureInProgress在 Navigator 对象上,所以我使用的(并且假定是首选方式)是:
onWillPop: () async {
if (Navigator.of(context).userGestureInProgress)
return false;
else
return true;
},
Run Code Online (Sandbox Code Playgroud)
Rém*_*let 16
WillPopScope 是这样做的正确方法.
不要责怪Flutter.责备IOS没有后退按钮[插入邪恶的笑容].
(它看起来太复杂......它应该更容易......就像根应用程序上的设置一样).
这绝对不复杂.这是一个班轮:
new WillPopScope(
onWillPop: () async {
return false;
},
child: <children here>
)
Run Code Online (Sandbox Code Playgroud)
配置文件会使事情变得更加复杂,因为它更难以阅读和维护.
请记住,在颤动中,一切都是小部件而不仅仅是其中的一半.认证,配置,一切.
Mis*_*son 14
MaterialPageRoute有一个名为的参数fullscreenDialog,默认设置为 false。当为 true 时,您的页面动画会有所不同,并且在 iOS 上滑动返回将被禁用。
用法示例:
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => HomePage(), fullscreenDialog: true));
Run Code Online (Sandbox Code Playgroud)
请参阅此处的一些讨论:https : //github.com/flutter/flutter/issues/14203
小智 6
我遇到了类似的问题,我想阻止滑动返回导航(默认弹出功能)。这段代码帮助解决了这个问题。
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
body: Center(
child: Text('Example'),
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
此代码现在会阻止 iOS 和 Android 的后退导航(默认后退按钮),而这正是我所寻找的。希望这可以帮助。
您可以在您的 Widget 版本中尝试此操作:
@override
Widget build(BuildContext context) {
return WillPopScope(//forbidden swipe in iOS(my ThemeData(platform: TargetPlatform.iOS,)
onWillPop: ()async {
if (Navigator.of(context).userGestureInProgress)
return false;
else
return true;
},
child: <your child>,
);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
新 Flutter 版本更新:WillPopScope 现在变为 PopScope,具有更简单的 canPop 属性
PopScope(
canPop : false,
child : --child here--
)
Run Code Online (Sandbox Code Playgroud)
这段代码应该可以解决问题
| 归档时间: |
|
| 查看次数: |
5509 次 |
| 最近记录: |