Vous pouvez utiliser des API intégrées de sûreté du typage pour assurer la sûreté du typage au moment de la compilation
graphique de navigation. Ces API sont disponibles lorsque votre application utilise la navigation
Compose ou le DSL Kotlin de navigation. Ils sont disponibles depuis le Navigation
2.8.0
.
Ces API sont équivalentes à ce que Safe Args fournit pour les graphiques de navigation créées à l'aide de XML.
Définir des itinéraires
Pour utiliser des routes avec sûreté du typage dans Compose, vous devez d'abord définir des routes sérialisables ou objets qui représentent vos routes.
- Objet: permet d'utiliser un objet pour les routes sans arguments.
- Classe: utilisez une classe ou une classe de données pour les itinéraires avec des arguments.
KClass<T>
: utilisez cette option si vous n'avez pas besoin de transmettre d'arguments, comme une classe sans paramètres, ou une classe dans laquelle tous les paramètres ont des valeurs par défaut <ph type="x-smartling-placeholder">- </ph>
- Par exemple :
Profile::class
- Par exemple :
Dans les deux cas, l'objet ou la classe doit être sérialisable.
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 le 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. En d'autres termes,composable<Profile>
- Définir le type de destination est une approche plus robuste que la transmission d'une
Chaîne
route
comme danscomposable("profile")
. - La classe route définit le type de chaque argument de navigation, comme dans
val id: String
.NavArgument
n'est donc pas nécessaire. - Pour le routage du profil, la méthode d'extension
toRoute()
recrée le l'objetProfile
deNavBackStackEntry
et ses .
Pour plus d'informations sur la conception de votre graphique en général, consultez la section Conception votre page "Graphique de navigation".
Accéder à une route avec sûreté du typage
Enfin, vous pouvez accéder à votre composable à l'aide de la commande navigate()
.
en transmettant l'instance de la route:
navController.navigate(Profile(id = 123))
L'utilisateur est redirigé vers la destination composable<Profile>
dans
graphique de navigation. Tous les arguments de navigation, tels que id
, peuvent être obtenus en
reconstruire Profile
à l'aide de NavBackStackEntry.toRoute
et lire sa
propriétés.