728x90
- 보통 우리가 컴포즈를 사용할때는 NavHost 라는 것을 활용해서 여러 컴포저블로 Srceen을 구현하고, NavController 의 Navigate를 사용해 Srceen을 이동하면서 사용한다.
- 이 사이에서 가장 많이 사용되는것은 단연코 NavController 이다. 이것의 기능은 여러가지이지만, 지금은 Stack 관련해서만 작성할 예정.
NavController.popBackStack
- 쉽게 알다시피 뒤로가기 기능과 동일한 작업을 한다.
- BackQueue 에 Stack이 쌓이고, popBackStack을 호출하면 최상위 Stack 부터 차례대로 pop 하면서 스크린을 뒤로 가게 해준다.
하지만 이 부분에는 약간의 문제가 존재한다.
- Navigate 시 컴포즈는 이동되는 화면을 Stack 에 바로 쌓아버리기 때문에, A → B로 이동시 BackQueue 에는 1. A 2. B 순으로 쌓인다.
- 그리고 NavController.popBackStack 은 BackQueue 가 존재하면 해당 화면을 Queue 에서 Pop을 해버리기 때문에 해당 화면이 StartDestination 이 아닐 경우 화면을 pop해버린다.
- 나의 경우 문제가 StartDestination 화면에서 Navigate 시 popUpTo 로 해당 스크린 지움 → 상위 스크린 A, B, C .. 여러 번 이동 → 뒤로가기 이미지 연타로 popBackStack 하는데 자꾸 빈 화면이 나오는 문제가 있었다. 빈 화면이 나오는 이유는 아래와 같았다.

그래서 만약 popBackStack으로 인한 무언가의 버그가 생기면 이 점을 확인해보고, previousBackStackEntry 가 null 일 경우에만 popBackStack() 이 되도록 수정해보자
주의할 점
- StartDestination으로 설정한 Route의 경우 Navigate 시 popUpTo에 지정해줘도 BackStackEntry 에서 살아남는다. 이유는 아래와 같았다.

728x90
'프로그래밍 > Jetpack Compose' 카테고리의 다른 글
[Jetpack Compose] 키보드 영역에 맞춰 화면을 재구성하기 (imePadding) (1) | 2024.09.24 |
---|---|
[Jetpack Compose] 애니메이션 관련 함수들을 알아보자 ! (animateColorAsState, Crossfade, AnimatedVisibility) (0) | 2024.09.24 |
[Jetpack Compose] State Hoisting (상태 끌어올리기) 를 알아보자 (0) | 2024.09.24 |
[Jetpack Compose] rememberUpdatedState 가 무엇인지와 언제 사용하는지 알아보자 (0) | 2024.09.24 |
[Jetpack Compose] remember 에 쓰이는 key 가 무엇일까? (1) | 2024.09.23 |