저장화면→앨범화면_이동시_무한_내비게이션 - boostcampwm-2024/and04-Nature-Album GitHub Wiki

💥 저장화면→앨범화면 이동시 무한 내비게이션

문제 정의

  • 사진 저장 화면 저장 이후 앨범 화면으로 전환시 recomposition이 반복되며 화면이 그려지지 않음

스크린샷 2024-11-12 19-38-33

문제 해결 방법

  • 불필요한 recomposition을 유발하는 코드 위치 이동

문제 해결 진행

문제 원인 :


    composable(NavigateDestination.SavePhoto.route) {
        locationHandler.getLocation { location -> lastLocation = location }
        SavePhotoScreen(
            location = lastLocation,
        )
    }

location이 update될때 recomposition 발생 → NavHost에서NavigateDestination.SavePhoto.route 으로 다시 라우팅 → location 업데이트 루프

→ 위치 update를 사진 촬영 이후, navigate이전으로 옮겨야 할 필요 있음

But, locationHandler 의 생성자에서 takePicture를 주입받고 있어 navigate를 실행하는 takePicture에서 위치를 구할 수 없음.

⇒ takePicture를 생성자에서 주입받는게 아니라 필요한 함수 실행시 인자로 전달하도록 수정

⇒ 런쳐에서 navigate하기전에 위치 정보를 한번만 업데이트

  	rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == RESULT_OK) {
            locationHandler.getLocation { location -> lastLocation = location }
            navController.navigate(NavigateDestination.SavePhoto.route) {
                launchSingleTop = true
            }
        }