我用WillPopScope
覆盖了我的Scaffold
,但是当滑动返回iOS时,onWillPop
回调没有被调用。
这可能是什么原因呢?
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
print("onWillPop"); // is not printed to the console
if (Navigator.of(context).userGestureInProgress)
return false;
else
return true;
},
child: new Scaffold(
appBar: new AppBar(
title: new Text("App Title"),
),
body: Stack(
children: <Widget>[
...widgets...
],
),
),
);
}
5条答案
按热度按时间olmpazwi1#
正如这里提到的,要使您的WillPopScope工作,您应该覆盖MaterialPageRoute中的hasScopedWillPopCallbackgetter,如下所示:
然后在路由器中的CustomMaterialPageRoute上替换MaterialPageRoute。它肯定会使WillPopScope同时适用于IOS和Android平台。
8wtpewkr2#
我找到了原因:WillPopScope不起作用是因为上面构建方法的小部件不是top小部件(main调用的小部件),希望对其他人有所帮助。
rkttyhzu3#
像这样的小工具很有效。
rmbxnbpk4#
将其作为顶层小部件,可能放在build函数中:
6tdlim6h5#
这是一个问题,在这个issue中讨论了很多,但是有一种方法可以修复它,那就是使用this package