Android

컴포즈 네비게이션 2.8 이후

최데브 2024. 12. 17. 21:49

안드로이드 네비게이션은 2.8 버전 이후로 Kotlin-Serializable 기반 타입 안정성 시스템이 도입됐다.

이전에는 뭔가 나사 하나 빠진듯한 라이브러리였는데 이제야 좀 그럴듯해졌다.

이거말고도 네비게이션은 버그가 참 많았던거 같은데 그런거도 많이 잡힌거 같다.

 

암튼 2.8 버전으로 달라진게 뭐냐면 아래처럼 화면을 이동할 수 있다.

 

@Serializable
object Adata

@Serializable
data class Bdata(val id: String)

NavHost(navController, startDestination = Home) {
  composable<Adata> {
    AScreen(onNaivateTo = { id →
      navController.navigate(Bdata(id))
    })
  composable<Bdata> { backStackEntry ->
    val bdata: Bdata = backStackEntry.toRoute()
    Bscreen(bdata)
  }
}

 

진짜 멋지다. 

이전에는 string 형태로 경로를 만들어주고 / 나 ? 를 이용해서 argument 를 넘겨주는 방식으로 처리했는데

argument 가 필요없는 화면은 object 로 필요한 화면은 data class 를 이용해서 정의할 수 있게 됐다.

 

훨씬 보기편하고 깔끔해졌다. 

 navController.navigate(Bdata(id)) 

이렇게 써주면 Bscreen 으로 이동하면서 동시에 id 도 넘겨줄 수 있게 되는것이다.

 

또또 달라진게 있다.

 

기존에는 프리미티브 타입들을 제외하곤 넘기려면 json 으로 string 변환해서 넘긴다던지 불편하게 처리했어야했는데

이제는 

이 링크를 보면 커스텀하게 NavType 을 정의해서 전달 할 수 있게 됐다

만세!

 

오늘도 감사합니다 구글님

반응형