Android

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 = nullgeç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.

Kaynak kodu

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu