저장화면→앨범화면_이동시_무한_내비게이션 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
💥 저장화면→앨범화면 이동시 무한 내비게이션
문제 정의
- 사진 저장 화면 저장 이후 앨범 화면으로 전환시 recomposition이 반복되며 화면이 그려지지 않음
문제 해결 방법
- 불필요한 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
}
}