Sobes.tech
Junior — Middle

როგორ შეიძლება მონაცემების გადაცემა განხორციელდეს ეკრანებს შორის Jetpack Compose Navigation-ის გამოყენებისას?

sobes.tech AI

პასუხი AI-სგან

Jetpack Compose Navigation-ში მონაცემების გადაცემისთვის რამდენიმე მიდგომაა:

  1. ნავიგაციის არგუმენტები
    • როდესაც გამოაცხადებთ მარშრუტს, შეგიძლიათ მიუთითოთ პარამეტრები, რომლებიც გადაეცემა შემდეგ ეკრანს.
    • მხარდაჭერილია პრიმიტიული ტიპები და სტრიქონები.
    • მაგალითი 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")

ამიტომ, მეთოდის არჩევანი დამოკიდებულია მონაცემების ტიპსა და მოცულობაზე, ასევე აპლიკაციის არქიტექტურაზე.