You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中如何监听ModalBottomSheetLayout的关闭事件?

Jetpack Compose ModalBottomSheetLayout 关闭事件监听方案

存在对应的监听方法,核心是通过ModalBottomSheetState的状态变化实现监听,目前有两种常用实现方式:

方案1:全场景关闭事件监听(推荐)

ModalBottomSheetLayout的可见状态由ModalBottomSheetValue枚举控制,包含Expanded(展开)、HalfExpanded(半展开,可选配置)、Hidden(隐藏)三个状态。你可以通过LaunchedEffect监听状态变化,当状态变为Hidden时触发关闭逻辑,该方案可以覆盖所有关闭场景:包括用户点击遮罩层关闭、下滑关闭、代码主动调用关闭的情况。
示例代码如下:

val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)

// 监听底部页状态变化
LaunchedEffect(sheetState.currentValue) {
    if (sheetState.currentValue == ModalBottomSheetValue.Hidden) {
        // 此处写入底部页关闭后的业务逻辑
        Log.d("BottomSheet", "底部弹出页已关闭")
    }
}

ModalBottomSheetLayout(
    sheetState = sheetState,
    sheetContent = {
        // 底部弹出页内容区域
        Text("底部弹出页内容")
    }
) {
    // 主页面内容区域
}

方案2:仅监听代码主动触发的关闭

如果你只需要监听代码主动调用hide()触发的关闭场景,可以直接等待hide()方法执行完成后执行后续逻辑:

val scope = rememberCoroutineScope()
val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)

Button(onClick = {
    scope.launch {
        sheetState.hide()
        // hide方法执行完成即代表底部页已关闭,此处写入后续逻辑
        Log.d("BottomSheet", "主动关闭底部页完成")
    }
}) {
    Text("关闭底部弹出页")
}

注意:该方案无法覆盖用户交互触发的关闭行为,仅适合特定场景使用。

补充说明

如果你使用的是Compose Material 3版本的ModalBottomSheet组件,逻辑完全一致,仅需将ModalBottomSheetState替换为M3对应的同名类,状态枚举对应改为SheetValue.Hidden即可。

内容的提问来源于stack exchange,提问作者MKD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:45:03