ایمنی را در Kotlin DSL و Navigation Compose تایپ کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
میتوانید از APIهای ایمن نوع داخلی برای ارائه ایمنی نوع کامپایل برای نمودار ناوبری خود استفاده کنید. این APIها زمانی در دسترس هستند که برنامه شما از Navigation Compose یا Navigation Kotlin DSL استفاده کند. آنها از Navigation 2.8.0 در دسترس هستند.
این APIها معادل چیزی هستند که Safe Args برای نمودارهای ناوبری ساخته شده با استفاده از XML فراهم می کند.
مسیرها را تعریف کنید
برای استفاده از مسیرهای ایمن نوع در Compose، ابتدا باید کلاسها یا اشیایی قابل سریالسازی را تعریف کنید که مسیرهای شما را نشان میدهند.
از قوانین زیر برای تصمیم گیری در مورد نوع مسیر خود استفاده کنید:
Object : از یک شی برای مسیرهای بدون آرگومان استفاده کنید.
کلاس : از یک کلاس یا کلاس داده برای مسیرهای دارای آرگومان استفاده کنید.
KClass<T> : اگر نیازی به ارسال آرگومان ندارید، مانند کلاس بدون پارامتر، یا کلاسی که همه پارامترها دارای مقادیر پیش فرض هستند، استفاده کنید.
به عنوان مثال: Profile::class
در همه موارد، شی یا کلاس باید سریالپذیر باشد.
به عنوان مثال:
// Define a home route that doesn't take any arguments@SerializableobjectHome// Define a profile route that takes an ID@SerializabledataclassProfile(valid:String)
نمودار خود را بسازید
بعد، باید نمودار ناوبری خود را تعریف کنید. از تابع composable() برای تعریف composable ها به عنوان مقصد در نمودار ناوبری خود استفاده کنید.
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 را به دست آورد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Type safety in Kotlin DSL and Navigation Compose\n\nYou can use built-in type safe APIs to provide compile-time type safety for your\nnavigation graph. These APIs are available when your app uses the [Navigation\nCompose](/jetpack/compose/navigation) or [Navigation Kotlin DSL](/guide/navigation/navigation-kotlin-dsl). They are available as of `Navigation\n2.8.0`.\n\nThese APIs are equivalent to what [Safe Args](/guide/navigation/navigation-pass-data#Safe-args) provides to navigation graphs\nbuilt using XML.\n\nDefine routes\n-------------\n\nTo use type-safe routes in Compose, you first need to define serializable\nclasses or objects that represent your routes.\n\nTo define serializable objects use `@Serializable` annotation provided by the\n[Kotlin Serialization plugin](https://kotlinlang.org/docs/serialization.html).\nThis plugin can be added to your project by [adding these\ndependencies](/guide/navigation#set-up).\n\nUse the following rules to decide what type to use for your route:\n\n- **Object**: Use an object for routes without arguments.\n- **Class**: Use a class or data class for routes with arguments.\n- **`KClass\u003cT\u003e`** : Use if you don't need to pass arguments, such as a class without parameters, or a class where all parameters have default values\n 1. For example: `Profile::class`\n\nIn all cases the object or class must be serializable.\n\nFor example: \n\n // Define a home route that doesn't take any arguments\n @Serializable\n object Home\n\n // Define a profile route that takes an ID\n @Serializable\n data class Profile(val id: String)\n\n### Build your graph\n\nNext, you need to define your navigation graph. Use the [`composable()`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.collections.Map,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2))\nfunction to define composables as destinations in your navigation graph. \n\n NavHost(navController, startDestination = Home) {\n composable\u003cHome\u003e {\n HomeScreen(onNavigateToProfile = { id -\u003e\n navController.navigate(Profile(id))\n })\n }\n composable\u003cProfile\u003e { backStackEntry -\u003e\n val profile: Profile = backStackEntry.toRoute()\n ProfileScreen(profile.id)\n }\n }\n\nObserve the following in this example:\n\n- `composable()` takes a type parameter. That is, `composable\u003cProfile\u003e`.\n- Defining the destination type is a more robust approach than passing a [`route`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2)) [string](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2)) as in `composable(\"profile\")`.\n- The route class defines the type of each navigation argument, as in `val id:\n String`, so there's no need for [`NavArgument`](/reference/kotlin/androidx/navigation/NavArgument).\n- For the profile route, the `toRoute()` extension method recreates the `Profile` object from the [`NavBackStackEntry`](/reference/androidx/navigation/NavBackStackEntry) and its arguments.\n\nFor more information on how to design your graph in general, see the [Design\nyour Navigation graph](/guide/navigation/design) page.\n\n### Navigate to type safe route\n\nFinally, you can navigate to your composable using the [`navigate()`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.collections.Map,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2))\nfunction by passing in the instance of the route: \n\n navController.navigate(Profile(id = 123))\n\nThis navigates the user to the `composable\u003cProfile\u003e` destination in the\nnavigation graph. Any navigation arguments, such as `id`, can be obtained by\nreconstructing `Profile` using `NavBackStackEntry.toRoute` and reading its\nproperties.\n| **Important:** Because the parameters of the data class are typed, when you pass an instance of that class to `navigate()`, the arguments are necessarily type safe.\n\n### Additional resources\n\n- [Design your navigation graph](/guide/navigation/design)\n- [Use your navigation graph](/guide/navigation/use-graph)"]]