Vous pouvez utiliser des API intégrées sécurisées 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 graphiques de navigation créés à l'aide de XML.
Définir des routes
Pour utiliser des routes sécurisées par type dans Compose, vous devez d'abord définir des classes ou des objets sérialisables qui représentent vos routes.
Pour définir des objets sérialisables, utilisez l'annotation @Serializable
fournie par le plug-in de sérialisation Kotlin.
Pour ajouter ce plug-in à votre projet, ajoutez ces dépendances.
Utilisez les règles suivantes pour déterminer le type à utiliser pour votre itinéraire:
- Objet: utilisez 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>
: à utiliser si vous n'avez pas besoin de transmettre d'arguments, par exemple une classe sans paramètres ou une classe où tous les paramètres ont des valeurs par défaut.- Par exemple :
Profile::class
- Par exemple :
Dans tous les 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 la fonction composable()
pour définir des composables comme 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)
}
}
Notez les points suivants dans cet exemple:
composable()
accepte un paramètre de type. Par exemple,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 le parcours 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 de votre graphique en général, consultez la page Concevoir votre graphique de navigation.
Accéder à un chemin sécurisé
Enfin, vous pouvez accéder à votre composable à l'aide de la fonction navigate()
en transmettant l'instance de l'itinéraire:
navController.navigate(Profile(id = 123))
L'utilisateur est alors 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.