میتوانید از APIهای ایمن نوع داخلی برای ارائه ایمنی نوع کامپایل برای نمودار ناوبری خود استفاده کنید. این APIها زمانی در دسترس هستند که برنامه شما از Navigation Compose یا Navigation Kotlin DSL استفاده کند. آنها از Navigation 2.8.0
در دسترس هستند.
این APIها معادل چیزی هستند که Safe Args برای نمودارهای ناوبری ساخته شده با استفاده از XML فراهم می کند.
مسیرها را تعریف کنید
برای استفاده از مسیرهای ایمن نوع در Compose، ابتدا باید کلاسها یا اشیایی قابل سریالسازی را تعریف کنید که مسیرهای شما را نشان میدهند.
برای تعریف اشیاء قابل سریال سازی از حاشیه نویسی @Serializable
ارائه شده توسط افزونه Kotlin Serialization استفاده کنید. این افزونه را می توان با افزودن این وابستگی ها به پروژه شما اضافه کرد.
از قوانین زیر برای تصمیم گیری در مورد نوع مسیر خود استفاده کنید:
- Object : از یک شی برای مسیرهای بدون آرگومان استفاده کنید.
- کلاس : از یک کلاس یا کلاس داده برای مسیرهای دارای آرگومان استفاده کنید.
-
KClass<T>
: اگر نیازی به ارسال آرگومان ندارید، مانند کلاس بدون پارامتر، یا کلاسی که همه پارامترها دارای مقادیر پیش فرض هستند، استفاده کنید.- به عنوان مثال:
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
را به دست آورد.