Gezinme grafiğiniz için derleme zamanında tür güvenliği sağlamak üzere yerleşik tür güvenli API'leri kullanabilirsiniz. Bu API'ler, uygulamanız Navigation Compose veya Navigation Kotlin DSL'yi kullandığında kullanılabilir. Bu özellikler Navigation
2.8.0
itibarıyla kullanıma sunulmuştur.
Bu API'ler, XML kullanılarak oluşturulan gezinme grafiklerine Safe Args'in sunduğu özelliklere eşdeğerdir.
Rotaları tanımlama
Compose'da tür açısından güvenli rotaları kullanmak için önce rotalarınızı temsil eden serileştirilebilir sınıfları veya nesneleri tanımlamanız gerekir.
Serileştirilebilir nesneleri tanımlamak için Kotlin Serileştirme eklentisi tarafından sağlanan @Serializable
ek açıklamasını kullanın.
Bu eklenti, bu bağımlılıkları ekleyerek projenize eklenebilir.
Rotanız için hangi türün kullanılacağına karar vermek üzere aşağıdaki kuralları kullanın:
- Nesne: Parametre içermeyen yollar için nesne kullanın.
- Sınıf: Bağımsız değişken içeren yollar için 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ğerlerinin olduğu bir sınıf gibi bağımsız değişken iletmeniz gerekmiyorsa kullanın- Örneğin:
Profile::class
- Örneğin:
Her durumda nesne veya sınıf serileştirilebilir olmalıdır.
Ö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şturma
Ardından gezinme grafiğinizi tanımlamanız gerekir. Bileşenleri 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. Yanicomposable<Profile>
.- Hedef türünü tanımlamak,
composable("profile")
'te olduğu gibi birroute
dize iletmekten daha sağlam bir yaklaşımdır. - Rota sınıfı, her gezinme bağımsız değişkeninin türünü tanımlar (
val id: String
'te olduğu gibi). Bu nedenleNavArgument
'ye gerek yoktur. - Profil yolunda
toRoute()
uzantı yöntemi,NavBackStackEntry
ve bağımsız değişkenlerindenProfile
nesnesini yeniden oluşturur.
Grafiğinizi genel olarak tasarlama hakkında daha fazla bilgi için Gezinme grafiğinizi tasarlama sayfasına bakın.
Güvenli yol yazmak için gezinme
Son olarak, rota örneğini ileterek navigate()
işlevini kullanarak bileşeninize gidebilirsiniz:
navController.navigate(Profile(id = 123))
Bu işlem, kullanıcıyı gezinme grafiğindeki composable<Profile>
hedefine yönlendirir. id
gibi tüm gezinme bağımsız değişkenleri, NavBackStackEntry.toRoute
kullanılarak Profile
yeniden oluşturulup özelliklerinin okunmasıyla elde edilebilir.