728x90
원인
Android Composed에서 Navigation이 일어났을 때 발생했습니다.
문제의 코드
navigateToQrMainPage = {
navController.navigate("main_page"){
launchSingleTop = true
restoreState = false
popUpTo(navController.graph.startDestinationId){
saveState = true
inclusive = true
}
}
}
해결
From the androiddev community on Reddit
Explore this post and more from the androiddev community
www.reddit.com
레딧 이슈를 확인해 본 결과 Lifecycle 문제임을 찾았습니다.
HACK: Fix You cannot access the NavBackStackEntry's ViewModels until it is added to the NavController's back stack (i.e., the Lifecycle of the NavBackStackEntry reaches the CREATED state). Using hiltViewModel() does NOT work!
요약하면
NavBackStackEntry의 라이프사이클이 Created 상태가 될 때까지 NavBackStackEntry의 ViewModel에 액세스 할 수 없다
공식문서의 Compose Navigation의 패치내역을 보면 다음과 같은 내용이 있습니다.

버그 수정의 1번을 보시면 우리가 직면한 문제와 동일한 것을 알 수 있습니다.
따라서 버전을 올리면 쉽게 해결될 문제이지만 제가 사용하고 있는 내비게이션은 워치용 내비게이션입니다.
implementation "androidx.wear.compose:compose-navigation:1.2.0"
컴포즈 내비게이션의 문제라고 파악되고 이후 버전에선 해결된 문제이지만 이 시점에서 선택할 수 있는 방법은 2가지입니다.
1. IllegalStateException을 예외처리하고 실행하는 것
2. 외부 Navigation 라이브러리를 사용하는 것
주어진 시간이 많다면 라이브러리를 사용하는 방법을 생각해 볼 수 있지만 간단하게 처리하고 다음 작업으로 넘어가야 하므로 예외처리 해주었습니다.
navigateToQrMainPage = {
try {
navController.navigate("main_page")
{
launchSingleTop = true
restoreState = false
popUpTo("main_page") {
saveState = false
inclusive = false
}
}
} catch (e: IllegalStateException){
e.printStackTrace()
}
},
728x90