Sobes.tech
Junior — Middle

Jakými metodami lze realizovat přenos dat mezi obrazovkami při použití navigace Jetpack Compose?

sobes.tech AI

Odpověď od AI

V Jetpack Compose Navigation existuje několik přístupů k přenosu dat mezi obrazovkami:

  1. Argumenty navigace
    • Při deklaraci trasy můžete specifikovat parametry, které budou předány na další obrazovku.
    • Podporovány jsou primitivní typy a řetězce.
    • Příklad předání id:
navController.navigate("detail_screen/$itemId")

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

    • Použití ViewModel, která žije na úrovni navigačního grafu nebo aktivity.
    • Oba obrazovky mají přístup ke stejnému instanci ViewModelu a mohou si vyměňovat data přes ni.
  2. Stav (State Hoisting)

    • Přenos stavu přes parametry funkcí obrazovek.
    • Vhodné pro malé údaje a když jsou obrazovky ve stejném komponentu.
  3. Uložení dat v NavBackStackEntry.savedStateHandle

    • Data lze uložit do savedStateHandle před návratem na předchozí obrazovku.
    • Umožňuje vrácení dat zpět.

Příklad použití savedStateHandle:

// Odeslání dat zpět
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)

// Získání dat v předchozí obrazovce
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")

Volba metody závisí na typu a objemu dat, stejně jako na architektuře aplikace.