Sobes.tech
Junior — Middle

Koje metode mogu biti korišćene za implementaciju prenosa podataka između ekrana pri korišćenju Jetpack Compose Navigation?

sobes.tech АИ

Одговор од АИ

U Jetpack Compose Navigation postoji nekoliko pristupa za prenos podataka između ekrana:

  1. Argumenti navigacije
    • Prilikom deklarisanja rute, možete navesti parametre koji će biti prosleđeni sledećem ekranu.
    • Podržani su primitivni tipovi i stringovi.
    • Primer prenosa id:
navController.navigate("detail_screen/$itemId")

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

    • Korišćenje ViewModel-a koji živi na nivou navigacionog grafa ili aktivnosti.
    • Oba ekrana imaju pristup istom ViewModel instanci i mogu razmenjivati podatke putem nje.
  2. Stanje (State Hoisting)

    • Prenos stanja putem parametara funkcija ekrana.
    • Pogodno za male podatke i kada su ekrani u istom komponentu.
  3. Čuvanje podataka u NavBackStackEntry.savedStateHandle

    • Podaci se mogu staviti u savedStateHandle pre povratka na prethodni ekran.
    • Omogućava vraćanje podataka.

Primer korišćenja savedStateHandle:

// Slanje podataka nazad
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Dobijanje podataka u prethodnom ekranu
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Dakle, izbor metode zavisi od tipa i obima podataka, kao i od arhitekture aplikacije.