[Jetpack Compose] navigation remove back queue

A -> B -> C -> D -> E -> F 순서로 화면을 이동했을 때, F에서 back 버튼을 누르면 바로 A로 가고 싶을 때가 있다. navController.popBackStack(B, true) 같은 걸 이용해도 되지만, 만약 A -> C -> D -> E -> F 로 이동했다면?

이럴 때는 A와 F 사이의 모든 화면을 지워버리는 방법이 있다.

LaunchedEffect(Unit) {
  with(navController) {
    val fromIndex = backQueue.indexOfLast { it.destination.route == "A" } + 1
    val toIndex = backQueue.indexOf(navController.currentBackStackEntry)
    backQueue.subList(fromIndex, toIndex).clear()
  }
}

F 화면에서 이걸 호출하면 [A, B, C, D, E, F] -> [A, F] 로 돼서 back 버튼을 누르면 바로 A로 이동할 수 있다.


만약 A -> C -> D -> E -> F 로 이동했고, B ~ E를 지우고 싶어서 B를 찾으면 fromIndex가 0인지 -1인지가 나와서 모든 화면이 사라져서 back을 하면 흰 화면만 나오니 주의 필요