반응형
compose navigation과 uiState를 사용해서 A -> B로 이동하는 로직을 구현
B화면이 무한으로 실행되는것을 확인
기존 코드
val uiState = viewModel.uiState.collectAsStateWithLifecycle().value
var errorAlertState by remember { mutableStateOf(ErrorAlertState()) }
when (uiState) {
SplashViewModel.SplashUiState.Loading -> Unit
SplashViewModel.SplashUiState.Loaded -> navigateToList()
is SplashViewModel.SplashUiState.Failed -> errorAlertState = ErrorAlertState(true, uiState.message)
}
원인은 A에서 B로 이동할 때 A가 recomposition되면서 SplashViewModel.SplashUiState.Loaded -> navigateToList() 부분이 실행.
이로인해 무한 루프가 발생한다.
수정 코드
val uiState = viewModel.uiState.collectAsStateWithLifecycle().value
var errorAlertState by remember { mutableStateOf(ErrorAlertState()) }
if (uiState is SplashViewModel.SplashUiState.Failed) errorAlertState = ErrorAlertState(true, uiState.message)
LaunchedEffect(key1 = uiState) {
if (uiState == SplashViewModel.SplashUiState.Loaded) navigateToList()
}
화면 이동 부분을 LuanchedEffect로 따로 빼서 실행
해결됨

반응형
'안드로이드 > 개발관련(Kotlin)' 카테고리의 다른 글
| [Android] jvmTarget 지정 방식이 deprecated 된 이유 (0) | 2025.11.29 |
|---|---|
| [Android] TYPESAFE_PROJECT_ACCESSORS (1) | 2024.10.09 |
| [Android] bottom navigation bar의 높이를 구하는법 (Compose) (0) | 2024.07.30 |
| [Android] RippleClickable, NoRippleClickable (Compose) (0) | 2024.07.30 |
| [Android] Gravity start TabRow (Compose) (0) | 2024.07.30 |