Kotlin DSL 및 Navigation Compose의 유형 안전성

유형에 안전한 내장된 API를 사용하여 탐색 그래프에서 확인할 수 있습니다. 이 API는 앱에서 Navigation Compose 또는 Navigation Kotlin DSL. Navigation 2.8.0부터 사용할 수 있습니다.

이러한 API는 Safe Args가 탐색 그래프에 제공하는 API와 동일합니다. 빌드되었습니다.

경로 정의

Compose에서 유형 안전 경로를 사용하려면 먼저 직렬화 가능 여부를 정의해야 합니다. 경로를 나타내는 클래스 또는 객체입니다.

  • 객체: 인수가 없는 경로에 객체를 사용합니다.
  • 클래스: 인수가 있는 경로에 클래스 또는 데이터 클래스를 사용합니다.
  • KClass<T>: 클래스와 같은 인수를 전달할 필요가 없는 경우 사용합니다. 매개변수가 없는 클래스 또는 모든 매개변수에 기본값이 있는 클래스 <ph type="x-smartling-placeholder">
      </ph>
    1. 예: Profile::class

어떤 경우든 객체나 클래스는 직렬화될 수 있어야 합니다.

예를 들면 다음과 같습니다.

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

그래프 빌드

다음으로 탐색 그래프를 정의해야 합니다. composable() 사용 함수를 사용하여 구성 가능한 함수를 탐색 그래프에서 대상으로 정의할 수 있습니다.

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

이 예에서는 다음 사항을 확인합니다.

  • composable()는 유형 매개변수를 사용합니다. 즉, composable<Profile>
  • 대상 유형을 정의하는 것이 route 문자열(composable("profile")과 같은 형식).
  • route 클래스는 다음과 같이 각 탐색 인수의 유형을 정의합니다. val id: String, 따라서 NavArgument는 필요하지 않습니다.
  • 프로필 경로의 경우 toRoute() 확장 프로그램 메서드가 NavBackStackEntry 및 그 객체의 Profile 객체 인수입니다.

일반적으로 그래프를 디자인하는 방법에 대한 자세한 내용은 설계 탐색 그래프 페이지를 참조하세요.

마지막으로 navigate()를 사용하여 컴포저블로 이동할 수 있습니다. 함수에 다음과 같이 경로의 인스턴스를 전달합니다.

navController.navigate(Profile(id = 123))

이렇게 하면 사용자가 composable<Profile> 탐색 그래프에서 확인할 수 있습니다. 모든 탐색 인수(예: id)는 다음과 같이 가져올 수 있습니다. NavBackStackEntry.toRoute를 사용하여 Profile를 재구성하고 속성

추가 리소스