Jetpack Compose中如何在导航时清空回退栈?
实现方案
你可以通过给navController.navigate()方法传入navOptions配置参数实现切换屏幕时清空回退栈,不同场景的实现方式如下:
场景1:清空所有历史回退栈,将新页面设为根页面
这种适合登录成功后跳转到首页、完全清除登录页相关回退记录的场景,示例代码如下:
navController.navigate(Screen.Overview.route + "/${state.accessToken}") { // 清空回退栈到导航图的起始目的地 popUpTo(navController.graph.startDestinationId) { // 表示连起始目的地一起弹出 inclusive = true } // 可选配置:避免重复打开同一个页面时创建多个实例 launchSingleTop = true }
如果你要完全清空所有回退栈,直接把popUpTo的参数改成0即可:
navController.navigate(Screen.Overview.route + "/${state.accessToken}") { popUpTo(0) { inclusive = true } launchSingleTop = true }
场景2:清空回退栈到指定页面后再跳转新页面
如果只需要清空某个特定页面之上的回退记录,只需要把popUpTo的参数改成对应页面的路由即可:
navController.navigate(Screen.Overview.route + "/${state.accessToken}") { // 这里替换为你要回退到的目标页面的路由 popUpTo(Screen.Home.route) { // 设为false表示保留目标页面,true则连目标页面一起弹出 inclusive = false } launchSingleTop = true }
参数说明
popUpTo:指定回退栈要弹出到的目标位置inclusive:是否要把popUpTo指定的目标页面也一起弹出回退栈launchSingleTop:如果当前栈顶已经是要跳转的目标页面,就不会重复创建新的实例,避免出现重复页面
内容的提问来源于stack exchange,提问作者Morozov
相关产品推荐
相关产品推荐

