Keamanan jenis di Kotlin DSL dan Navigation Compose

Anda dapat menggunakan API aman jenis bawaan untuk memberikan keamanan jenis waktu kompilasi untuk grafik navigasi Anda. 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 file resource XML navigasi bawaan

Menentukan rute

Untuk menggunakan rute yang aman jenisnya di Compose, Anda harus terlebih dahulu menentukan class atau objek yang dapat diserialisasi yang mewakili rute Anda.

  • Objek: 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
    1. Contoh: Profile::class

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. 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 efektif daripada meneruskan string route seperti dalam composable("profile").
  • Class rute menentukan jenis setiap argumen navigasi, seperti dalam val id: String, sehingga NavArgument tidak diperlukan.
  • 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.

Terakhir, Anda dapat menavigasi ke composable menggunakan fungsi 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 propertinya.

Referensi tambahan