Sûreté du typage dans le DSL Kotlin et Navigation Compose

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>
    1. Par exemple : Profile::class

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 dans composable("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'objet Profile de NavBackStackEntry 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".

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.

Ressources supplémentaires