Junior — Middle
Jakimi metodami można zrealizować przekazywanie danych między ekranami podczas korzystania z nawigacji Jetpack Compose?
sobes.tech AI
Odpowiedź od AI
W Jetpack Compose Navigation istnieje kilka podejść do przekazywania danych między ekranami:
- Argumenty nawigacji
- Podczas deklarowania trasy można określić parametry, które będą przekazywane do następnego ekranu.
- Obsługiwane są typy prymitywne i łańcuchy znaków.
- Przykład przekazywania id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Użycie ViewModel, które żyje na poziomie grafu nawigacji lub aktywności.
- Oba ekrany mają dostęp do tego samego egzemplarza ViewModel i mogą wymieniać dane przez niego.
-
Stan (State Hoisting)
- Przekazywanie stanu przez parametry funkcji ekranów.
- Odpowiednie dla małych danych i gdy ekrany są w tym samym komponencie.
-
Zapisywanie danych w NavBackStackEntry.savedStateHandle
- Można umieścić dane w savedStateHandle przed powrotem do poprzedniego ekranu.
- Umożliwia to przekazywanie danych z powrotem.
Przykład użycia savedStateHandle:
// Przesyłanie danych z powrotem
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Odbieranie danych w poprzednim ekranie
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Wybór metody zależy od typu i objętości danych, a także od architektury aplikacji.