Kotlin DSL और नेविगेशन कंपोज़ में सुरक्षा टाइप करें

कंपाइल-टाइम टाइप की सुरक्षा देने के लिए, पहले से मौजूद सुरक्षित एपीआई का इस्तेमाल किया जा सकता है नेविगेशन ग्राफ़. ये एपीआई तब उपलब्ध होते हैं, जब आपका ऐप्लिकेशन नेविगेशन का इस्तेमाल करता है लिखें या नेविगेशन Kotlin DSL. ये Navigation 2.8.0 तक उपलब्ध हैं.

ये एपीआई, नेविगेशन ग्राफ़ को Safe Args पर उपलब्ध कराए गए एपीआई के बराबर होते हैं एक्सएमएल का इस्तेमाल करके बनाया गया है.

रूट तय करें

लिखें में टाइप-सुरक्षित रूट इस्तेमाल करने के लिए, आपको पहले क्रम से लगाए जा सकने वाले रूट तय करने होंगे वे क्लास या ऑब्जेक्ट जो आपके रास्तों को दिखाते हैं.

  • ऑब्जेक्ट: बिना आर्ग्युमेंट वाले रास्तों के लिए ऑब्जेक्ट का इस्तेमाल करें.
  • क्लास: आर्ग्युमेंट वाले रूट के लिए, क्लास या डेटा क्लास का इस्तेमाल करें.
  • KClass<T>: अगर आपको आर्ग्युमेंट पास नहीं करने हैं, तो इसका इस्तेमाल करें, जैसे कि क्लास पैरामीटर के बिना या ऐसी क्लास जहां सभी पैरामीटर के डिफ़ॉल्ट मान हों
    1. उदाहरण के लिए: Profile::class

दोनों ही मामलों में, ऑब्जेक्ट या क्लास को क्रम में लगाया जा सकता है.

उदाहरण के लिए:

// Define a home route that doesn't take any arguments
@Serializable
object Home

// Define a profile route that takes an ID
@Serializable
data class Profile(val id: String)

अपना ग्राफ़ बनाएं

इसके बाद, आपको अपना नेविगेशन ग्राफ़ तय करना होगा. composable() का इस्तेमाल करें फ़ंक्शन का इस्तेमाल करें.

NavHost(navController, startDestination = Home) {
     composable<Home> {
         HomeScreen(onNavigateToProfile = { id ->
             navController.navigate(Profile(id))
         })
     }
     composable<Profile> { backStackEntry ->
         val profile: Profile = backStackEntry.toRoute()
         ProfileScreen(profile.id)
     }
}

इस उदाहरण में इन्हें देखें:

  • composable(), एक टाइप पैरामीटर लेता है. इसका मतलब है कि composable<Profile>.
  • डेस्टिनेशन टाइप तय करना, route स्ट्रिंग, जैसे कि composable("profile").
  • रूट क्लास हर नेविगेशन आर्ग्युमेंट का टाइप तय करती है, जैसे कि val id: String, इसलिए NavArgument की कोई ज़रूरत नहीं है.
  • प्रोफ़ाइल रूट के लिए, toRoute() एक्सटेंशन विधि इसे NavBackStackEntry से Profile ऑब्जेक्ट और उसके आर्ग्युमेंट.

अपने ग्राफ़ को सामान्य रूप से डिज़ाइन करने के बारे में ज़्यादा जानकारी के लिए, डिज़ाइन करें नेविगेशन ग्राफ़ पेज पर जाएं.

आखिर में, navigate() का इस्तेमाल करके अपने कंपोज़ेबल पर जाया जा सकता है फ़ंक्शन को रूट के इंस्टेंस में पास करके:

navController.navigate(Profile(id = 123))

यह उपयोगकर्ता कोcomposable<Profile> नेविगेशन ग्राफ़. कोई भी नेविगेशन आर्ग्युमेंट, जैसे कि id हासिल किए जा सकते हैं NavBackStackEntry.toRoute का इस्तेमाल करके Profile को फिर से बनाना और इसे प्रॉपर्टी.

अन्य संसाधन