Sobes.tech
Junior — Middle

Quelles méthodes peuvent être utilisées pour réaliser le transfert de données entre les écrans lors de l'utilisation de la navigation Jetpack Compose?

sobes.tech IA

Réponse de l'IA

Dans Jetpack Compose Navigation, il existe plusieurs approches pour transmettre des données entre les écrans :

  1. Arguments de navigation
    • Lors de la déclaration de la route, vous pouvez spécifier des paramètres qui seront passés à l'écran suivant.
    • Les types primitifs et les chaînes sont pris en charge.
    • Exemple de transmission d'un id :
navController.navigate("detail_screen/$itemId")

composable("detail_screen/{itemId}") { backStackEntry ->
    val itemId = backStackEntry.arguments?.getString("itemId")
    DetailScreen(itemId)
}
  1. Shared ViewModel

    • Utilisation d'un ViewModel qui vit au niveau du graphique de navigation ou de l'activité.
    • Les deux écrans accèdent à la même instance de ViewModel et peuvent échanger des données via celle-ci.
  2. État (State Hoisting)

    • Passage d'état via des paramètres de fonctions d'écran.
    • Convient pour de petites quantités de données et lorsque les écrans sont dans un même composant.
  3. Enregistrement des données dans NavBackStackEntry.savedStateHandle

    • Vous pouvez stocker des données dans savedStateHandle avant de revenir à l'écran précédent.
    • Permet de renvoyer des données.

Exemple d'utilisation de savedStateHandle :

// Envoi de données en arrière
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Récupération de données dans l'écran précédent
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Ainsi, le choix de la méthode dépend du type et du volume de données, ainsi que de l'architecture de l'application.