Sobes.tech
Назад к вопросам
Junior — Middle
79

Какими методами можно реализовать передачу данных между экранами при использовании Jetpack Compose Navigation?

Компании, где спрашивали
Effective Technologies

Ответ от нейросети

sobes.tech AI

В Jetpack Compose Navigation для передачи данных между экранами можно использовать несколько подходов:

  1. Аргументы навигации (Navigation Arguments)
    • При объявлении маршрута можно указать параметры, которые будут передаваться в следующий экран.
    • Поддерживаются примитивные типы и строки.
    • Пример передачи id:
navController.navigate("detail_screen/$itemId")

composable("detail_screen/{itemId}") { backStackEntry ->
    val itemId = backStackEntry.arguments?.getString("itemId")
    DetailScreen(itemId)
}
  1. Shared ViewModel

    • Использование ViewModel, которая живет на уровне навигационного графа или активности.
    • Оба экрана получают доступ к одному экземпляру ViewModel и могут обмениваться данными через неё.
  2. Состояние (State Hoisting)

    • Передача состояния через параметры функций экранов.
    • Подходит для небольших данных и когда экраны находятся в одном компоненте.
  3. Сохранение данных в NavBackStackEntry.savedStateHandle

    • Можно положить данные в savedStateHandle перед возвратом к предыдущему экрану.
    • Позволяет передавать данные обратно.

Пример использования savedStateHandle:

// Передача данных назад
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Получение данных в предыдущем экране
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Таким образом, выбор метода зависит от типа и объема данных, а также от архитектуры приложения.