Hedef Oluştur – Gezinme Kitaplığı

Bir önceki yazımda çok basit bir Jetpack Compose Navigasyonu oluşturuyorum ve NavRoute Birden çok yerde sabit kodlama dizelerini önlemek için mühürlü sınıf.
Ancak, daha iyi bir çözüm sadece bu harika ürünü kullanmak olabilir. Hedef Oluştur kütüphane! Bu uygulamayı bu kütüphaneyi kullanmak için nasıl dönüştürebileceğimizi görelim.
Kurulum build.gradle (modül düzeyi)
1. KSP Eklentisi Ekle
Ekle com.google.devtools.ksp
Eklenti
plugins {
...
id 'com.google.devtools.ksp' version '1.6.10-1.0.2'
}
2. Oluşturulan KSP Yolu Ekle
İçine oluşturulan KSP yolunu ekleyin android
engellemek
android {
...
applicationVariants.all { variant ->
kotlin.sourceSets {
getByName(variant.name) {
kotlin.srcDir("build/generated/ksp/${variant.name}/kotlin")
}
}
}
}
3. Oluşturma Hedefi Bağımlılıkları Ekle
dependencies {
...
implementation 'io.github.raamcosta.compose-destinations:core:1.5.1-beta'
ksp 'io.github.raamcosta.compose-destinations:ksp:1.5.1-beta'
}
Gezinme Grafiği Oluştur
Mevcut navigasyon grafiği ile ilgili kod (ör. BuildNavGraph()
ve NavRoute
) kodu tamamen kaldırılabilir ve hedef oluşturma ek açıklamalarıyla değiştirilebilir.
1. Ekranlara Açıklama Ekleyin @Destination
Tüm birleştirilebilir ekranlara açıklama ekleyin @Destination
@Destination
@Composable
fun LoginScreen(
...
) {
...
@Destination
@Composable
fun HomeScreen(
...
) {
...
@Destination
@Composable
fun ProfileScreen(
...
) {
...
@Destination
@Composable
fun SearchScreen(
...
) {
...
2. Başlangıç Ekranına Açıklama Ekleyin @RootNavGraph(start = true)
@RootNavGraph(start = true)
@Destination
@Composable
fun LoginScreen(
...
)
...
Birleştirilebilir ekrana açıklama ekledikten sonra, Projeyi Yeniden İnşa Et böylece gerekli tüm oluşturulan kod üretilecektir.
3. Değiştir NavHostController
ile birlikte DestinationsNavigator
Orijinal oturum açma birleştirilebilir ekranında, buna sahiptir navigateToHome
geri aramak.
fun LoginScreen(
navigateToHome: () -> Unit
) {
...
}
Şimdi, ile değiştirilebilir DestinationsNavigator
parametre.
fun LoginScreen(
navigator: DestinationsNavigator
) {
...
}
Gezinmek için orijinal uygulama kullanımı NavHostController
navController.navigate(NavRoute.Home.path)
ve şimdi ile değiştirilir DestinationsNavigator
navigator.navigate(HomeScreenDestination)
HomeScreenDestination
oluşturulan koddur.
Aşağıdaki diğer bazı dönüşüm örnekleri
navController.popBackStack()
navigator.popBackStack()
navController.navigate(NavRoute.Profile.withArgs(id.toString(), showDetails.toString()))
navigator.navigate(ProfileScreenDestination(7, true))
navController.navigate(NavRoute.Login.path) {
popUpTo(NavRoute.Login.path) {inclusive = true}
}
navigator.navigate(LoginScreenDestination) {
popUpTo(LoginScreenDestination.route) {inclusive = true}
}
Gördüğünüz gibi,
DestinationsNavigator
temelde bir sarıcıNavHostController
bu da onu çok daha kolay hale getiriyor.
4. Çağrı DestinationsNavHost()
ana şekillendirilebilir ekranda
Yer değiştirmek BuildNavGraph()
@Composable
private fun MainScreen() {
SimpleNavComposeAppTheme {
val navController = rememberNavController()
BuildNavGraph(navController)
}
}
ile birlikte DestinationsNavHost()
@Composable
private fun MainScreen() {
SimpleNavComposeAppTheme {
DestinationsNavHost(navGraph = NavGraphs.root)
}
}
5. Kullanım EmptyDestinationsNavigator
içinde @Preview
Bu kütüphanenin yazarı sayesinde, Rafael Costa bana gerçekten kullanabileceğimi söyledi. EmptyDestinationsNavigator
boş uygulama olarak ve bunun için kullandı @preview
geçmek yerinenull
.
geçmek yerine navigator = null
geçebilirim navigator = EmptyDestinationsNavigator
.
@Preview(showBackground = true)
@Composable
private fun DefaultPreview() {
SimpleNavComposeAppTheme(useSystemUiController = false) {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
HomeScreen(navigator = EmptyDestinationsNavigator)
}
}
}
Bunu yaparak, beyan etmem gerekmiyor navigator: DestinationsNavigator?
birleştirilebilir işlevde null yapılabilir değişken parametresi.
Tamamlandı!
Çözüm
Bu kütüphane harika! Çok fazla ortak koddan kurtulur. Dilediğim bir şey, olduğu gibi ayarlamam gerekmiyor Adım 1 – KSP Eklentisi Ekle ve Adım 2 – Oluşturulan KSP Yolu Ekle yukarıda, ama belki bu teknik olarak mümkün değildir.