Pase un argumento a un gráfico de navegación anidado en Jetpack Compose.
Desde la documentación, veo que se pueden anidar gráficos de navegación de la siguiente manera:
NavHost(navController, startDestination = "home") {
...
// Al navegar al gráfico a través de su ruta ('login') automáticamente
// se navega al destino de inicio del gráfico- 'nombre de usuario'
// encapsulando así la lógica de enrutamiento interna del gráfico
navigation(startDestination = "username", route = "login") {
composable("username") { ... }
composable("password") { ... }
composable("registration") { ... }
}
...
}
Me pregunto, ¿cómo se pasa un argumento en la ruta y se hace disponible para todos los componibles dentro del gráfico de navegación?
Aquí está mi gráfico de navegación actual:
navigation(
// Me gustaría obtener este parámetro
route = "dashboard?classId={classId}",
startDestination = Route.ScreenOne.route) {
composable(Route.ScreenOne.route) {
// Y luego pasar el parámetro aquí, o a cualquier componible inferior
ScreenOne(classId)
}
composable(Route.ScreenTwo.route) {
ScreenTwo()
}
composable(Route.ScreenThree.route) {
ScreenThree()
}
}
Básicamente, estoy tratando de evitar establecer el argumento de navegación classId individualmente en cada ruta componible. No vi una manera de pasar una lista de argumentos a navegación()
como se puede en un componible()
.
Puede ser que lo que estoy describiendo no sea posible, ¡pero espero los pensamientos de cualquiera!
davy.ai
Para pasar un argumento en la ruta y hacerlo disponible para todos los componentes dentro del gráfico de navegación, puedes usar argumentos nombrados en la cadena de la ruta y recuperarlos usando la propiedad
navBackStackEntry?.arguments
dentro de cada componente. Aquí tienes un ejemplo:Con este enfoque, puedes pasar el argumento
classId
solo una vez en la llamada anavigation()
y recuperarlo en cada componente usando la propiedadnavBackStackEntry?.arguments
. Ten en cuenta que esta propiedad devuelve unBundle?
, por lo que debes usar el método adecuado para recuperar el argumento basado en su tipo (por ejemplo,getString ()
para un argumento de tipo String).