Estoy usando compose-navigation
(alpha09) para manejar la navegación entre componibles
quiero quitar el Pantalla de bienvenida al pasar al siguiente destino (no quiero que el atrás presionado para volver a Splash)
Los siguientes intentos no funcionaron como se esperaba:
navHostController.navigate(Route.login.id) {
navHostController.graph.clear()
}
navHostController.navigate(Route.login.id)
navHostController.graph.clear()
val currentDest = navHostController.currentDestination
navHostController.navigate(Route.login.id)
if (currentDest != null) {
navHostController.graph.remove(currentDest)
}
Entonces, ¿cómo puedo eliminar la pantalla de bienvenida y luego pasar a la siguiente?
lo sé
En Jetpack Componer 1.0.0
para navegar y eliminar el Composable anterior de la pila trasera Puedes usar:
navController.navigate(Screens.Login.name) {
popUpTo(Screens.Splash.name) {
inclusive = true
}
}
El código anterior navegará desde el Splash
pantalla a Login
y aparecerá todo, incluido el Splash
pantalla.
-
Fresco. Agradecer. Aceptaré la tuya ya que mi antigua respuesta automática está obsoleta ahora.
– Mahdi Malv
10 de julio de 2021 a las 12:40
-
Genial, funcionó, popUpTo(0) no funcionó para mí
–Mubashir Murtaza
26 de diciembre de 2022 a las 5:17
Mahdi Malv
Para v1.0.0-alfa09 (Y 1.0 estable)
Usando popUpTo(0)
puede borrar la pila antes de navegar al siguiente destino. Entonces:
navHostController.navigate(Route.login.id) {
// popUpTo = 0 // DEPRECATED
popUpTo(0)
}
-
popUpto está en desuso
– Rulogarcilan
20 de junio de 2021 a las 21:59
-
@Rulogarcillan Pero no
popUpTo(0)
– vitidev
10 de agosto de 2021 a las 13:25
-
Solución válida para 1.0.0 estable
– Danielle
27 de abril de 2022 a las 10:15
-
El único que funcionó para mí, me sorprende que esto no se mencione en ninguna parte de los documentos
– Driss Bounouar
25 de agosto de 2022 a las 13:24
-
La solución que encontré es evitar la codificación 0, puede usar el primer elemento de navHostController.backQueue y pasar su id a popUpTo: popUpTo(navHostController.backQueue.first().destination.id) Para obtener más información, aquí está el detalle explicación medium.com/@banmarkovic/…
–Ban Markovic
3 ene a las 12:59
naufragio bboyair
Para una función reutilizable consistente que no necesita conocer la ruta actual, use esta función de extensión NavOptionsBuilder
fun NavOptionsBuilder.popUpToTop(navController: NavController) {
popUpTo(navController.currentBackStackEntry?.destination?.route ?: return) {
inclusive = true
}
}
^ Al igual que otras respuestas, aparece en la ruta actual, pero en lugar de tener que nombrar la ruta actual específica, la obtiene de la entrada de backstack.
Ahora puedes usarlo así:
navController.navigate(ScreenRoutes.Login.route) { popUpToTop(navController) }
^ Ese ejemplo navega a Iniciar sesión y debería borrar toda la pila anterior.
Abdul Mateen
Para borrar toda la pila trasera
Para eliminar varias pantallas componibles de la pila, use el siguiente fragmento
navController.navigate(ScreenRoutes.Login.route){
popUpTo(navController.graph.findStartDestination().id){
inclusive = true }}
O para mantener a Home en back stack
navController.navigate(ScreenRoutes.SelectCourseLayout.route){
popUpTo(ScreenRoutes.Home.route)
}
Prohibir Markovic
Aparte de las pantallas, la pila trasera contiene gráficos de navegación, y su raíz es siempre lo primero en la pila trasera. Nuestro NavHostController contiene un gráfico, por lo que al abrir su id, puede borrar su back stack:
popUpTo(navHostController.graph.id)
Para más información, aquí está la explicación detallada. https://medium.com/@banmarkovic/jetpack-compose-clear-back-stack-popbackstack-inclusive-explained-14ee73a29df5
jaydipsinh zala
Para borrar la pila posterior, simplemente puede crear esto Extension
funcione y reutilícelo cuando corresponda.
fun NavHostController.navigateAndClean(route: String) {
navigate(route = route) {
popUpTo(graph.startDestinationId) { inclusive = true }
}
graph.setStartDestination(route)
}
huno
Jetpack componer v1.0.5
navController.backQueue.removeIf { it.destination.route == "Splash" }
navController.popBackStack()