Flutter中从dialog或bottom sheet跳转页面时bottomBar导航栏隐藏如何解决
问题原因
你使用的应该是persistent_bottom_nav_bar这类持久化底部导航库,问题根源是showDialog/showModalBottomSheet默认开启了useRootNavigator: true,会把弹窗压入APP的根导航栈,而不是底部导航关联的子路由栈。从根导航栈跳转页面时,页面会覆盖整个根窗口,自然就把底部导航栏盖住了。
解决方案
- 第一步:调用
showDialog时显式设置useRootNavigator: false,让弹窗挂载到当前子页面的路由栈,而非根栈
修改后的showTheDialog代码如下:
showTheDialog() { showDialog( context: context, useRootNavigator: false, // 新增这一行,核心修改 builder: (BuildContext context) { return AlertDialog( title: Text("My Super title"), content: Text("Hello World"), actions: [ TextButton( onPressed: () { Navigator.pop(context); gotoSecondScreen(); }, child: Text('Go Forward'), ) ], ); }); }
- 第二步:如果上述修改后还有问题,确认你调用
pushNewScreen时传入的上下文mainCon是你的Scaffold页面的上下文,而非弹窗的builder上下文,也不是根路由的上下文。 - 如果你是从
showModalBottomSheet跳转,同样给showModalBottomSheet加上useRootNavigator: false参数即可。
内容的提问来源于stack exchange,提问作者Mohib Raja
相关产品推荐
相关产品推荐

