Escritura de mapas de navegación anidados en Jetpack | Joe Birch | Mayo de 2021
Para organizar aquí, dividimos las diferentes partes del planisferio de navegación en partes separadas.
Para ello, usaremos la función de extensión NavGraphBuilder.navigation (), que nos permite construir gráficos de navegación anidados. Comenzaremos usando esta función y sus parámetros de construcción para proporcionar objetos componibles que formen un representación anidado.
navigation(...)
composable(OnboardingDirections.authentication.destination)
Authentication(
navController.hiltNavGraphViewModel(
route = OnboardingDirections.authentication.destination
)
)
composable(AuthenticationDirections.forgotPassword().destination)
ResetPassword(
navController.hiltNavGraphViewModel(
route =AuthenticationDirections.forgotPassword().destination
)
)
Ahora, tenemos un representación anidado que contiene nuestros objetivos de autenticación y restablecimiento de contraseña. Esto separará nuestros componibles relacionados con la autenticación del resto del planisferio de navegación, esencialmente creando un planisferio cómodo anidado interiormente del planisferio de navegación raíz. Notará que nuestros destinos componibles tienen exactamente el mismo aspecto que antiguamente: hemos conservado la definición de ruta, porque todavía necesitamos poder navegar a estos destinos individuales, esta diferencia anidada ahora puede navegar con destino a nosotros como una función completa.
Para ello, la función de extensión de navegación incluso contiene otros dos parámetros: el primer parámetro se utiliza para determinar el destino que se utilizará al navegar a este planisferio de características. Se declara en forma de startDestination y debe hacer relato a la ruta de uno de los destinos combinables incluidos. En mi caso, quiero que el representación anidado comience desde Autenticación componible, por lo que para startDestination, coincidirá con la raíz del destino componible.
navigation(
startDestination =
AuthenticationDirections.authentication.destination
)
composable(AuthenticationDirections.authentication.destination)
Authentication(
navController.hiltNavGraphViewModel(
route = AuthenticationDirections.authentication.destination
)
)
...
Aunque hemos definido el destino auténtico para el representación anidado, todavía no hemos proporcionado un método para navegar por el representación anidado. De modo similar a los destinos combinables, incluso necesitamos aclarar una ruta para el representación anidado; luego, al realizar la navegación, podemos usar esa ruta para navegar a nuestro representación anidado. Según el artículo susodicho, he definido la dirección de navegación en el objeto Kotlin.Encima de la relato de NavigationCommand para cada destino, incluso agregaremos un raíz Campo, utilizado para determinar la ruta del planisferio de características anidado.Aquí, declararemos que la ruta de enrutamiento de la función de autenticación es comprobación. Independientemente de si utiliza las siguientes configuraciones similares, la ruta de enrutamiento solo debe contener una prisión que defina la ruta utilizada para navegar a esta función.
object AuthenticationDirections
val root = object : NavigationCommand
override val arguments = emptyList<NamedNavArgument>()
override val destination = "authentication"
val authenticate = object : NavigationCommand
override val arguments = emptyList<NamedNavArgument>()
override val destination = "authenticate"val forgotPassword = object : NavigationCommand
override val arguments = emptyList<NamedNavArgument>()
override val destination = "forgot_password"
Una vez hecho esto, ahora podemos usar la navegación para aplicar esta ruta al representación anidado ruta debate. En este punto, ahora tenemos una forma de navegar al representación anidado; al hacerlo, startDestination será el primer punto de navegación que se mostrará en el representación.
navigation(
startDestination =
AuthenticationDirections.authenticate.destination,
route = AuthenticationDirections.root.destination
)
...