ایمنی را در Kotlin DSL و Navigation Compose تایپ کنید

می‌توانید از APIهای ایمن نوع داخلی برای ارائه ایمنی نوع کامپایل برای نمودار ناوبری خود استفاده کنید. این APIها زمانی در دسترس هستند که برنامه شما از Navigation Compose یا Navigation Kotlin DSL استفاده کند. آنها از Navigation 2.8.0 در دسترس هستند.

این APIها معادل چیزی هستند که Safe Args برای نمودارهای ناوبری ساخته شده با استفاده از XML فراهم می کند.

مسیرها را تعریف کنید

برای استفاده از مسیرهای ایمن نوع در Compose، ابتدا باید کلاس‌ها یا اشیایی قابل سریال‌سازی را تعریف کنید که مسیرهای شما را نشان می‌دهند.

برای تعریف اشیاء قابل سریال سازی از حاشیه نویسی @Serializable ارائه شده توسط افزونه Kotlin Serialization استفاده کنید. این افزونه را می توان با افزودن این وابستگی ها به پروژه شما اضافه کرد.

از قوانین زیر برای تصمیم گیری در مورد نوع مسیر خود استفاده کنید:

  • Object : از یک شی برای مسیرهای بدون آرگومان استفاده کنید.
  • کلاس : از یک کلاس یا کلاس داده برای مسیرهای دارای آرگومان استفاده کنید.
  • 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() برای تعریف 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") است.
  • کلاس route نوع هر آرگومان ناوبری را مانند val id: String تعریف می کند، بنابراین نیازی به NavArgument نیست.
  • برای مسیر پروفایل، متد الحاقی toRoute() شی Profile را از NavBackStackEntry و آرگومان های آن دوباره ایجاد می کند.

برای اطلاعات بیشتر در مورد نحوه طراحی نمودار به طور کلی، به صفحه طراحی نمودار ناوبری خود مراجعه کنید.

در نهایت، می‌توانید با استفاده از تابع navigate() با عبور از نمونه مسیر به composable خود بروید:

navController.navigate(Profile(id = 123))

این کاربر را به مقصد composable<Profile> در نمودار ناوبری هدایت می کند. با بازسازی Profile با استفاده از NavBackStackEntry.toRoute و خواندن خصوصیات آن، می توان هر آرگومان ناوبری، مانند id را به دست آورد.

منابع اضافی