https://betterprogramming.pub/back-press-handling-in-android-jetpack-compose-42d9ed402d40

기본적으로 Jetpack Compose는 NavController를 이용하여 화면을 이동합니다.
프래그먼트와 액티비티에서 자유로워진 JetpackCompose는 스택으로 Composable메서드를 탐색합니다.

따라서 backPress를 누르게 되면 자동으로 이전에 있었던 Composable를 내부적으로 탐색합니다.

문제는 백 프레스를 클릭시 바텀시트를 닫거나 특정 작업을 지정하려고 할때에 대한 대응은 따로 구현을 해주어야 한다는 점입니다.

아래는 백 핸들러입니다.

@Composable 
public fun BackHandler(enabled: Boolean = true, onBack: () -> Unit)
  • enalbed — BackHandler가 백프레스를 처리할지 말지에 대한 여부를 확인합니다.
  • onBack — 백 프레스시 실행할 코드 블록입니다.
@Composable
fun SampleCompose() {

    ...
    
    BackHandler(enabled = true){
        // execute your custome logic here
    }
    
}

매개변수에 정적으로 값을 전달하게 되면 뒤로가기 이벤트를 클릭시 계속해서 소비할 것입니다. 따라서
정적으로 BackHandler를 전달하지 말고 이 부분에대해서는 상태를 전달해야 합니다.


올바른 예시

@Composable
fun LablesBottomSheetState(
    modalBottomSheetState : ModalBottomSheetState
){
    ...
    
    BackHandler(enabled = modalBottomSheetState.isVisible) {
        modalBottomSheetState.hide()
    }

}

여기에서 BackHandler 활성화는 바텀시트의 상태를 기반으로 합니다.
위 코드에 따르면 바텀시트의 Visible에 따라서 hide 메서드를 실행 시킬지 말지를 결정합니다.
정적으로 값을 넣어줄때와는 다른 점은 바텀시트의 상태가 바뀜에 따라 백 핸들러의 활성화가 결정된다는 점입니다.

profile
러닝커브를 따라서 등반중입니다.

0개의 댓글