Kotlin DSL ve Navigation Compose'da güvenlik türü yazın

Gezinme grafiğiniz için derleme zamanı türü güvenliği sağlamak amacıyla, yerleşik türde güvenli API'ler kullanabilirsiniz. Bu API'ler, uygulamanızda Gezinme Oluşturma veya Gezinme Kotlin DSL'yi kullandığında kullanılabilir. Bu kartlar Navigation 2.8.0 tarihinden itibaren kullanılabilir.

Bu API'ler, Güvenli Aramalar'ın yerleşik navigasyon XML kaynak dosyaları için sağladığı bilgilere eşdeğerdir.

Rotaları tanımlayın

Compose'da tür açısından güvenli rotaları kullanmak için ilk olarak rotalarınızı temsil eden seri hale getirilebilir sınıflar veya nesneler tanımlamanız gerekir.

  • Nesne: Bağımsız değişken içermeyen rotalar için bir nesne kullanın.
  • Sınıf: Bağımsız değişkenler içeren rotalar için bir sınıf veya veri sınıfı kullanın.
  • KClass<T>: Parametre içermeyen bir sınıf veya tüm parametrelerin varsayılan değerlere sahip olduğu bir sınıf gibi bağımsız değişkenleri aktarmanız gerekmiyorsa kullanın
    1. Örneğin: Profile::class

Her iki durumda da nesne veya sınıfın seri hale getirilebilir olması gerekir.

Örnek:

// 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)

Grafiğinizi oluşturun

Ardından, gezinme grafiğinizi tanımlamanız gerekir. composable'ları gezinme grafiğinizde hedef olarak tanımlamak için composable() işlevini kullanın.

NavHost(navController, startDestination = Home) {
     composable<Home> {
         HomeScreen(onNavigateToProfile = { id ->
             navController.navigate(Profile(id))
         })
     }
     composable<Profile> { backStackEntry ->
         val profile: Profile = backStackEntry.toRoute()
         ProfileScreen(profile.id)
     }
}

Bu örnekte aşağıdakilere dikkat edin:

  • composable(), bir tür parametresi alır. Yani, composable<Profile>.
  • Hedef türünün tanımlanması, composable("profile")'deki gibi bir route dizesi iletmekten daha güçlü bir yaklaşımdır.
  • Rota sınıfı, her gezinme bağımsız değişkeninin türünü tanımlar (val id: String'da olduğu gibi). Bu nedenle, NavArgument öğesine gerek yoktur.
  • toRoute() uzantısı yöntemi, profil rotası için NavBackStackEntry öğesinden ve bağımsız değişkenlerinden Profile nesnesini yeniden oluşturur.

Genel olarak grafiğinizi nasıl tasarlayacağınızla ilgili daha fazla bilgi için Gezinme grafiğinizi tasarlama sayfasına bakın.

Son olarak, rota örneğini geçirerek navigate() işlevini kullanıp composable'ınıza gidebilirsiniz:

navController.navigate(Profile(id = 123))

Bu işlem, kullanıcıyı gezinme grafiğindeki composable<Profile> hedefine yönlendirir. id gibi gezinme bağımsız değişkenleri, NavBackStackEntry.toRoute kullanılarak Profile öğesinin yeniden oluşturulması ve özelliklerinin okunmasıyla elde edilebilir.

Ek kaynaklar