Junior — Middle
Quali metodi possono essere utilizzati per implementare il trasferimento di dati tra schermi durante l'uso della navigazione Jetpack Compose?
sobes.tech AI
Risposta dell'AI
In Jetpack Compose Navigation ci sono diversi approcci per passare dati tra le schermate:
- Argomenti di navigazione
- Durante la dichiarazione del percorso, è possibile specificare parametri che verranno passati alla schermata successiva.
- Sono supportati tipi primitivi e stringhe.
- Esempio di passaggio di id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Uso di un ViewModel che vive a livello del grafico di navigazione o dell'attività.
- Entrambe le schermate accedono allo stesso esempio di ViewModel e possono scambiarsi dati tramite esso.
-
Stato (State Hoisting)
- Passaggio dello stato tramite parametri delle funzioni delle schermate.
- Adatto per piccoli dati e quando le schermate sono nello stesso componente.
-
Salvataggio dei dati in NavBackStackEntry.savedStateHandle
- È possibile mettere i dati in savedStateHandle prima di tornare alla schermata precedente.
- Permette di restituire dati.
Esempio di utilizzo di savedStateHandle:
// Inviare dati indietro
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Ottenere dati nella schermata precedente
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Quindi, la scelta del metodo dipende dal tipo e dal volume dei dati, nonché dall'architettura dell'applicazione.