You can use the sheetState object to observe the state changes of the ModalBottomSheetLayout and trigger the required logic when the bottom sheet is dismissed by the user. The sheetState object contains an isExpanded property that can be used to check whether the bottom sheet is expanded or not.
To listen for the bottom sheet dismissal event, you can add a DisposableEffect composable that will execute a callback function when the bottom sheet is dismissed. The DisposableEffect composable is used to perform a side effect when a composable is added or removed from the composition.
@Composable
fun BottomSheetWrapper(onDismiss: () -> Unit) {
val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)
// Listen for the bottom sheet dismissal event
DisposableEffect(sheetState) {
val callback = ModalBottomSheetCallback(onDismiss)
sheetState.addOnDismissedListener(callback)
onDispose { sheetState.removeOnDismissedListener(callback) }
}
ModalBottomSheetLayout(
sheetState = sheetState,
sheetContent = {
Spacer(modifier = Modifier.height(1.dp))
content()
},
modifier = modifier,
content = {}
)
}
class ModalBottomSheetCallback(private val onDismiss: () -> Unit) :
ModalBottomSheetState.BottomSheetStateCallback {
override fun onStateChanged(bottomSheet: ModalBottomSheetState, newState: ModalBottomSheetValue) {
if (newState == ModalBottomSheetValue.Hidden) {
onDismiss()
}
}
}
In this implementation, the BottomSheetWrapper composable takes an onDismiss lambda as a parameter that will be called when the bottom sheet is dismissed. We use the DisposableEffect composable to add and remove a ModalBottomSheetCallback that will listen for the bottom sheet dismissal event. When the bottom sheet is dismissed, the onDismiss lambda is called.