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
- Contoh:
Dalam semua kasus, objek atau class harus dapat diserialisasi.
Contoh:
// 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)
Membuat grafik
Selanjutnya, Anda perlu menentukan grafik navigasi. Gunakan fungsi composable()
untuk menentukan composable sebagai tujuan di grafik navigasi Anda.
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
Perhatikan hal-hal berikut dalam contoh ini:
composable()
menggunakan parameter jenis. Artinya,composable<Profile>
.- Menentukan jenis tujuan adalah pendekatan yang lebih andal daripada meneruskan
string
route
seperti dalamcomposable("profile")
. - Class rute menentukan jenis setiap argumen navigasi, seperti dalam
val id: String
, sehingga tidak perluNavArgument
. - Untuk rute profil, metode ekstensi
toRoute()
membuat ulang objekProfile
dariNavBackStackEntry
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.