Anda bisa 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 tersebut tersedia mulai Navigation
2.8.0
.
API ini setara dengan yang disediakan Safe Args untuk grafik navigasi dibuat menggunakan XML.
Menentukan rute
Untuk menggunakan rute dengan keamanan jenis di Compose, Anda harus terlebih dahulu menentukan rute yang dapat diserialisasi atau objek yang mewakili rute Anda.
- Object: Menggunakan objek untuk rute tanpa argumen.
- Class: Menggunakan class atau class data untuk rute dengan argumen.
KClass<T>
: Gunakan jika Anda tidak perlu meneruskan argumen, seperti class tanpa parameter, atau class dengan semua parameter memiliki nilai default- Contoh:
Profile::class
- Contoh:
Dalam kedua kasus tersebut, 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. Menggunakan composable()
untuk menentukan composable sebagai tujuan dalam 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 berikut dalam contoh ini:
composable()
menggunakan parameter jenis. Yaitu,composable<Profile>
.- Menentukan jenis tujuan adalah pendekatan yang lebih andal daripada meneruskan
route
string seperti dicomposable("profile")
. - Class rute menentukan jenis setiap argumen navigasi, seperti dalam
val id: String
, jadiNavArgument
tidak diperlukan. - Untuk rute profil, metode ekstensi
toRoute()
membuat ulang ObjekProfile
dariNavBackStackEntry
dan miliknya argumen.
Untuk informasi selengkapnya tentang cara mendesain grafik secara umum, lihat artikel Desain grafik Navigasi.
Membuka jenis rute yang aman
Terakhir, Anda dapat menavigasi ke composable menggunakan navigate()
dengan meneruskan instance rute:
navController.navigate(Profile(id = 123))
Tindakan ini akan mengarahkan pengguna ke tujuan composable<Profile>
di
grafik navigasi. Argumen navigasi apa pun, seperti id
, dapat diperoleh dengan
merekonstruksi Profile
menggunakan NavBackStackEntry.toRoute
dan membaca
properti baru.