解决CupertinoTabScaffold在安卓系统上返回键退出app的问题
flutter有一套iOS风格的组件,其名为Cupertino
,其中底部导航栏的组件为CupertinoTabScaffold
,但由于iPhone/iPad上没有系统级返回按键,该组件在开发时可能并没有测试过安卓上的返回按键,所以这造成了无论app当前处于哪个页面,只要按下安卓上的返回键,整个app都会退出的问题,下面是我的一些推测以及解决办法:
1. 原因推测(不一定准确)
底部导航栏中的每个tab都会默认生成一个独立的Navigator,但这些Navigator是“隐式”的,无法响应返回按钮,只有最外层主程序(注意不是首页/第一个tab页面)的Navigator是显式的,所以无论在哪按返回键,调用的都是最外层主程序的Navigator的pop方法,所以app会直接退出。
2. 解决方法:
将每个tab的Navigator显式的声明出来:
1
2
3
4
5final foundationNavKey = GlobalKey<NavigatorState>();
final qrCodeNavKey = GlobalKey<NavigatorState>();
final myPageNavKey = GlobalKey<NavigatorState>();
final navKeys = [foundationNavKey, qrCodeNavKey, myPageNavKey];使用
tabController
获取当前在哪个tab中:1
2
3
4
5
6final tabController = CupertinoTabController(initialIndex: 0);
CupertinoTabScaffold(
controller: tabController,
...
)拦截返回按键并实现功能:
1
2
3
4
5WillPopScope(
onWillPop: () async {
return !await navKeys[tabController.index].currentState!.maybePop();
},
)
3. 完整代码如下:
1 | class YLXBApp extends StatelessWidget { |