Junior — Middle
Ce metode pot fi utilizate pentru a realiza transferul de date între ecrane atunci când se utilizează navigarea Jetpack Compose?
sobes.tech AI
Răspuns de la AI
În Jetpack Compose Navigation, există mai multe abordări pentru a transmite date între ecrane:
- Argumente de navigare
- La declararea rutei, puteți specifica parametri care vor fi transmiși către ecranul următor.
- Sunt suportate tipuri primitive și șiruri de caractere.
- Exemplu de transmitere a id-ului:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Utilizarea unui ViewModel care trăiește la nivelul graficului de navigare sau al activității.
- Ambele ecrane au acces la aceeași instanță de ViewModel și pot schimba date prin intermediul acesteia.
-
Stare (State Hoisting)
- Transmiterea stării prin parametrii ai funcțiilor de ecran.
- Potrivit pentru date mici și când ecranele se află în același component.
-
Salvarea datelor în NavBackStackEntry.savedStateHandle
- Se pot pune date în savedStateHandle înainte de a reveni la ecranul anterior.
- Permite transmiterea datelor înapoi.
Exemplu de utilizare a savedStateHandle:
// Trimiterea datelor înapoi
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Obținerea datelor în ecranul anterior
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Prin urmare, alegerea metodei depinde de tipul și volumul datelor, precum și de arhitectura aplicației.