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

如何禁用Material3 1.1中ModalBottomSheet的返回按钮?

解决Material3 1.1中ModalBottomSheet返回按钮禁用问题

你的代码已有部分正确设置,但仍需调整细节以彻底禁用返回按钮触发的Sheet隐藏,以下是可行方案:

  • 确保confirmValueChange始终返回false,彻底阻止Sheet的任何状态变更(包括返回键触发的隐藏)
  • 保留BackHandler并让它消费返回事件,避免事件向下传递
  • 确认onDismissRequest为空实现,防止点击外部或返回键触发Sheet关闭

修改后的完整代码:

@Composable
fun CancellingBottomSheet(subState: Cancelling, onNavigateBackToBasket: () -> Unit) {
    // 消费返回事件,阻止其触发后续逻辑
    BackHandler { }

    ModalBottomSheet(
        onDismissRequest = {}, // 空实现,不响应关闭请求
        sheetState = rememberModalBottomSheetState(
            skipPartiallyExpanded = true,
            confirmValueChange = {
                // 拒绝任何状态变更请求,包括隐藏Sheet
                false
            }
        ),
        dragHandle = {}
    ) {
        Content(subState, onNavigateBackToBasket)
    }
}

若上述方案仍不生效,可通过监听Sheet状态强制维持展开状态,彻底拦截隐藏操作:

@Composable
fun CancellingBottomSheet(subState: Cancelling, onNavigateBackToBasket: () -> Unit) {
    val sheetState = rememberModalBottomSheetState(
        skipPartiallyExpanded = true,
        confirmValueChange = { false }
    )

    // 拦截返回事件
    BackHandler { }

    // 监听状态变化,若尝试隐藏则强制恢复为展开状态
    LaunchedEffect(sheetState.currentValue) {
        if (sheetState.currentValue != ModalBottomSheetValue.Expanded) {
            sheetState.show()
        }
    }

    ModalBottomSheet(
        onDismissRequest = {},
        sheetState = sheetState,
        dragHandle = {}
    ) {
        Content(subState, onNavigateBackToBasket)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:55:05