Kotlin DSL এবং নেভিগেশন রচনায় টাইপ নিরাপত্তা

আপনার নেভিগেশন গ্রাফের জন্য কম্পাইল-টাইম টাইপ নিরাপত্তা প্রদান করতে আপনি অন্তর্নির্মিত টাইপ নিরাপদ API ব্যবহার করতে পারেন। যখন আপনার অ্যাপ নেভিগেশন কম্পোজ বা নেভিগেশন কোটলিন ডিএসএল ব্যবহার করে তখন এই APIগুলি উপলব্ধ হয়৷ এগুলি Navigation 2.8.0 হিসাবে উপলব্ধ।

এই APIগুলি XML ব্যবহার করে নির্মিত নেভিগেশন গ্রাফগুলিতে সেফ আর্গস যা প্রদান করে তার সমতুল্য।

রুট সংজ্ঞায়িত করুন

রচনায় টাইপ-নিরাপদ রুটগুলি ব্যবহার করতে, আপনাকে প্রথমে আপনার রুটগুলিকে প্রতিনিধিত্ব করে এমন সিরিয়ালাইজেবল ক্লাস বা অবজেক্টগুলিকে সংজ্ঞায়িত করতে হবে।

কোটলিন সিরিয়ালাইজেশন প্লাগইন দ্বারা প্রদত্ত @Serializable টীকা ব্যবহার করুন। এই প্লাগইন এই নির্ভরতা যোগ করে আপনার প্রকল্পে যোগ করা যেতে পারে.

আপনার রুটের জন্য কোন ধরনের ব্যবহার করবেন তা নির্ধারণ করতে নিম্নলিখিত নিয়মগুলি ব্যবহার করুন:

  • অবজেক্ট : আর্গুমেন্ট ছাড়াই রুটের জন্য একটি অবজেক্ট ব্যবহার করুন।
  • ক্লাস : আর্গুমেন্ট সহ রুটের জন্য একটি ক্লাস বা ডেটা ক্লাস ব্যবহার করুন।
  • 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>
  • composable("profile") মতো route স্ট্রিং পাস করার চেয়ে গন্তব্যের ধরন সংজ্ঞায়িত করা আরও শক্তিশালী পদ্ধতি।
  • রুট ক্লাস প্রতিটি নেভিগেশন আর্গুমেন্টের ধরন নির্ধারণ করে, যেমন val id: String , তাই NavArgument এর কোনো প্রয়োজন নেই।
  • প্রোফাইল রুটের জন্য, toRoute() এক্সটেনশন পদ্ধতি NavBackStackEntry এবং এর আর্গুমেন্ট থেকে Profile অবজেক্টকে পুনরায় তৈরি করে।

সাধারণভাবে কীভাবে আপনার গ্রাফ ডিজাইন করবেন সে সম্পর্কে আরও তথ্যের জন্য, আপনার নেভিগেশন গ্রাফ পৃষ্ঠাটি ডিজাইন করুন।

অবশেষে, আপনি রুটের উদাহরণটি পাস করে navigate() ফাংশন ব্যবহার করে আপনার কম্পোজেবলে নেভিগেট করতে পারেন:

navController.navigate(Profile(id = 123))

এটি ব্যবহারকারীকে নেভিগেশন গ্রাফে composable<Profile> গন্তব্যে নেভিগেট করে। যেকোন নেভিগেশন আর্গুমেন্ট, যেমন id , NavBackStackEntry.toRoute ব্যবহার করে Profile পুনর্গঠন করে এবং এর বৈশিষ্ট্যগুলি পড়ার মাধ্যমে প্রাপ্ত করা যেতে পারে।

অতিরিক্ত সম্পদ