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)
@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 메서드를 실행 시킬지 말지를 결정합니다.
정적으로 값을 넣어줄때와는 다른 점은 바텀시트의 상태가 바뀜에 따라 백 핸들러의 활성화가 결정된다는 점입니다.