Vous pouvez utiliser des API intégrées avec sûreté du typage pour assurer la sûreté du typage au moment de la compilation de votre graphique de navigation. Ces API sont disponibles lorsque votre application utilise Navigation Compose ou le DSL Kotlin de navigation. Ils sont disponibles à partir du Navigation
2.8.0
.
Ces API sont équivalentes à ce que Safe Args fournit aux fichiers de ressources XML de navigation intégrés aux graphiques de navigation.
Définir des routes
Pour utiliser des routes avec sûreté du typage dans Compose, vous devez d'abord définir des classes ou des objets sérialisables qui représentent vos routes.
- Object (Objet) : utilisez un objet pour les routes sans arguments.
- Class (Classe) : utilisez une classe ou une classe de données pour les routes avec des arguments.
KClass<T>
: à utiliser si vous n'avez pas besoin de transmettre d'arguments, comme une classe sans paramètres ou une classe dont tous les paramètres ont des valeurs par défaut- Par exemple :
Profile::class
- Par exemple :
Dans les deux cas, l'objet ou la classe doit être sérialisable.
Par exemple :
// Define a home route that doesn't take any arguments
@Serializable
object Home
// Define a profile route that takes an ID
@Serializable
data class Profile(val id: String)
Créer votre graphique
Vous devez ensuite définir votre graphique de navigation. Utilisez la fonction composable()
pour définir des composables en tant que destinations dans votre graphique de navigation.
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
Observez les points suivants dans cet exemple:
composable()
utilise un paramètre de type. Autrement dit,composable<Profile>
.- Définir le type de destination est une approche plus robuste que de transmettre une chaîne
route
, comme danscomposable("profile")
. - La classe de route définit le type de chaque argument de navigation, comme dans
val id: String
. Il n'est donc pas nécessaire d'utiliserNavArgument
. - Pour la route de profil, la méthode d'extension
toRoute()
recrée l'objetProfile
à partir deNavBackStackEntry
et de ses arguments.
Pour en savoir plus sur la conception générale de votre graphique, consultez la page Concevoir votre graphique de navigation.
Accéder à une route sûre pour le typage
Enfin, vous pouvez accéder à votre composable à l'aide de la fonction navigate()
en transmettant l'instance de la route:
navController.navigate(Profile(id = 123))
L'utilisateur est redirigé vers la destination composable<Profile>
dans le graphique de navigation. Tous les arguments de navigation, tels que id
, peuvent être obtenus en reconstruisant Profile
à l'aide de NavBackStackEntry.toRoute
et en lisant ses propriétés.