컴포즈 네비게이션 2.8 이후
안드로이드 네비게이션은 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 변환해서 넘긴다던지 불편하게 처리했어야했는데
이제는
프래그먼트 및 Kotlin DSL | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 프래그먼트 및 Kotlin DSL 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 탐색 구성요소가 Kotlin 기반의
developer.android.com
이 링크를 보면 커스텀하게 NavType 을 정의해서 전달 할 수 있게 됐다
만세!
오늘도 감사합니다 구글님