Junior — Middle
Какви методи могат да се използват за реализиране на прехвърлянето на данни между екрани при използване на Jetpack Compose Navigation?
sobes.tech AI
Отговор от AI
В Jetpack Compose Navigation има няколко подхода за предаване на данни между екрани:
- Аргументи за навигация
- При обявяване на маршрута можете да посочите параметри, които ще бъдат предадени към следващия екран.
- Поддържат се примитивни типове и низове.
- Пример за предаване на id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Използване на ViewModel, която живее на ниво навигационен граф или активност.
- И двата екрана имат достъп до един и същ екземпляр на ViewModel и могат да обменят данни чрез него.
-
Състояние (State Hoisting)
- Предаване на състояние чрез параметри на функции на екрани.
- Подходящо за малки данни и когато екрани са в един и същи компонент.
-
Запазване на данни в NavBackStackEntry.savedStateHandle
- Може да поставите данни в savedStateHandle преди връщане към предишния екран.
- Позволява връщане на данни.
Пример за използване на savedStateHandle:
// Връщане на данни
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Получаване на данни в предишния екран
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Така изборът на метод зависи от типа и обема на данните, както и от архитектурата на приложението.