Jetpack Compose Navigation设置popUpTo后登录欢迎页未从回退栈清除
问题原因
你当前的popUpTo配置仅指定了移除LoginScreen及其之后入栈的页面,位于LoginScreen之前的登录欢迎页未被纳入弹出范围,因此会保留在回退栈中,首页点击返回键就会退回到该页面。
解决方案
方案1:指定弹出到登录流程的首个页面
将popUpTo的目标改为登录流程的首个路由(即欢迎页对应的路由Screen.WelcomeScreen.route),开启inclusive = true即可清空所有登录相关页面:
composable(Screen.LoginScreen.route) { LoginScreen { Log.d("AppMainNavigation", "AppMainNavigation: ${navController.backQueue}") navController.navigate(Screen.HomeBaseScreen.route){ // 弹出到欢迎页,包含欢迎页本身,清空整个登录流程栈 popUpTo(Screen.WelcomeScreen.route){ inclusive = true } launchSingleTop = true } } }
方案2:清空整个导航栈
如果希望直接清空所有历史页面,让首页成为栈内唯一页面,可以直接弹出到导航图根节点:
navController.navigate(Screen.HomeBaseScreen.route) { popUpTo(navController.graph.id) { inclusive = true } }
额外注意
你使用的navigation-compose:2.4.0-alpha02是早期测试版本,存在多个导航栈操作的已知缺陷,调整配置后如果仍有异常,建议升级到2.4.0及以上的稳定版本即可解决版本自带的bug。
内容的提问来源于stack exchange,提问作者Ramprasad Ranganathan
相关产品推荐
相关产品推荐

