Sobes.tech
Junior — Middle

Ce metode pot fi utilizate pentru a realiza transferul de date între ecrane atunci când se utilizează navigarea Jetpack Compose?

sobes.tech AI

Răspuns de la AI

În Jetpack Compose Navigation, există mai multe abordări pentru a transmite date între ecrane:

  1. Argumente de navigare
    • La declararea rutei, puteți specifica parametri care vor fi transmiși către ecranul următor.
    • Sunt suportate tipuri primitive și șiruri de caractere.
    • Exemplu de transmitere a id-ului:
navController.navigate("detail_screen/$itemId")

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

    • Utilizarea unui ViewModel care trăiește la nivelul graficului de navigare sau al activității.
    • Ambele ecrane au acces la aceeași instanță de ViewModel și pot schimba date prin intermediul acesteia.
  2. Stare (State Hoisting)

    • Transmiterea stării prin parametrii ai funcțiilor de ecran.
    • Potrivit pentru date mici și când ecranele se află în același component.
  3. Salvarea datelor în NavBackStackEntry.savedStateHandle

    • Se pot pune date în savedStateHandle înainte de a reveni la ecranul anterior.
    • Permite transmiterea datelor înapoi.

Exemplu de utilizare a savedStateHandle:

// Trimiterea datelor înapoi
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Obținerea datelor în ecranul anterior
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Prin urmare, alegerea metodei depinde de tipul și volumul datelor, precum și de arhitectura aplicației.