PersistentNavBarNavigator跳转异常:登录后无法保留底部导航栏
问题根源
从购物车页用pushNewScreen(withNavBar: false)打开登录页后,登录页的上下文已经脱离了原来的PersistentNavBar导航栈,此时在登录页里调用pushNewScreen哪怕设了withNavBar: true,也没法唤起底部导航栏。
可行解决方案
方案一:用pushReplacementScreen替换登录页
登录成功后,用pushReplacementScreen替换当前登录页,直接回到原导航栈,自动恢复底部导航栏:
PersistentNavBarNavigator.pushReplacementScreen( context, screen: Nexpage(), pageTransitionAnimation: PageTransitionAnimation.cupertino, );
方案二:传递原导航栈的上下文
跳转登录页时,把购物车页的上下文(属于PersistentNavBar的上下文)传过去,登录成功后用这个上下文跳转:
- 购物车页跳转代码:
final originalNavContext = context; PersistentNavBarNavigator.pushNewScreen( originalNavContext, screen: Login(originalNavContext: originalNavContext), withNavBar: false, pageTransitionAnimation: PageTransitionAnimation.cupertino, );
- 登录页接收并使用该上下文:
class Login extends StatelessWidget { final BuildContext originalNavContext; const Login({super.key, required this.originalNavContext}); void _handleLoginSuccess() { PersistentNavBarNavigator.pushNewScreen( originalNavContext, screen: Nexpage(), withNavBar: true, pageTransitionAnimation: PageTransitionAnimation.cupertino, ); Navigator.of(context).pop(); // 关闭当前登录页 } @override Widget build(BuildContext context) { return Scaffold( // 登录页面UI实现 ); } }
方案三:改用pushScreen临时隐藏导航栏
如果不需要让登录页完全脱离原栈,只是临时隐藏导航栏,用pushScreen加hideNavBar: true即可,登录成功后跳转自动恢复导航栏:
// 购物车页跳转登录 PersistentNavBarNavigator.pushScreen( context, screen: Login(), hideNavBar: true, pageTransitionAnimation: PageTransitionAnimation.cupertino, ); // 登录成功跳转 PersistentNavBarNavigator.pushNewScreen( context, screen: Nexpage(), withNavBar: true, pageTransitionAnimation: PageTransitionAnimation.cupertino, );
内容的提问来源于stack exchange,提问作者Fuad Mostafij
相关产品推荐
相关产品推荐

