Назад к вопросам
Junior — Middle
79
Какими методами можно реализовать передачу данных между экранами при использовании Jetpack Compose Navigation?
Компании, где спрашивали
Effective Technologies
Ответ от нейросети
sobes.tech AI
В Jetpack Compose Navigation для передачи данных между экранами можно использовать несколько подходов:
- Аргументы навигации (Navigation Arguments)
- При объявлении маршрута можно указать параметры, которые будут передаваться в следующий экран.
- Поддерживаются примитивные типы и строки.
- Пример передачи 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")
Таким образом, выбор метода зависит от типа и объема данных, а также от архитектуры приложения.