Keamanan jenis di Kotlin DSL dan Navigation Compose
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Anda dapat menggunakan API keamanan jenis bawaan untuk memberikan keamanan jenis waktu kompilasi untuk
grafik navigasi. API ini tersedia saat aplikasi Anda menggunakan Navigation
Compose atau Navigation Kotlin DSL. Fitur ini tersedia mulai Navigation
2.8.0.
API ini setara dengan yang disediakan Safe Args untuk grafik navigasi
yang dibuat menggunakan XML.
Menentukan rute
Untuk menggunakan rute yang aman dari jenis di Compose, Anda harus menentukan class atau objek
yang dapat diserialisasi yang mewakili rute terlebih dahulu.
Untuk menentukan objek yang dapat diserialisasi, gunakan anotasi @Serializable yang disediakan oleh
plugin Serialisasi Kotlin.
Plugin ini dapat ditambahkan ke project Anda dengan menambahkan dependensi
ini.
Gunakan aturan berikut untuk menentukan jenis yang akan digunakan untuk rute Anda:
Objek: Gunakan objek untuk rute tanpa argumen.
Class: Gunakan class atau class data untuk rute dengan argumen.
KClass<T>: Gunakan jika Anda tidak perlu meneruskan argumen, seperti class
tanpa parameter, atau class yang semua parameternya memiliki nilai default
Contoh: Profile::class
Dalam semua kasus, objek atau class harus dapat diserialisasi.
Contoh:
// Define a home route that doesn't take any arguments@SerializableobjectHome// Define a profile route that takes an ID@SerializabledataclassProfile(valid:String)
Membuat grafik
Selanjutnya, Anda perlu menentukan grafik navigasi. Gunakan fungsi composable()
untuk menentukan composable sebagai tujuan di grafik navigasi Anda.
composable() menggunakan parameter jenis. Artinya, composable<Profile>.
Menentukan jenis tujuan adalah pendekatan yang lebih andal daripada meneruskan
stringroute seperti dalam composable("profile").
Class rute menentukan jenis setiap argumen navigasi, seperti dalam val id:
String, sehingga tidak perlu NavArgument.
Untuk rute profil, metode ekstensi toRoute() membuat ulang
objek Profile dari NavBackStackEntry dan argumennya.
Untuk informasi selengkapnya tentang cara mendesain grafik secara umum, lihat halaman Mendesain
grafik Navigasi.
Menavigasi ke rute keamanan jenis
Terakhir, Anda dapat membuka composable menggunakan fungsi navigate()
dengan meneruskan instance rute:
navController.navigate(Profile(id=123))
Tindakan ini akan mengarahkan pengguna ke tujuan composable<Profile> dalam
grafik navigasi. Setiap argumen navigasi, seperti id, dapat diperoleh dengan
merekonstruksi Profile menggunakan NavBackStackEntry.toRoute dan membaca
propertinya.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[null,null,["Terakhir diperbarui pada 2025-07-27 UTC."],[],[],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)"]]