如何禁用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
相关产品推荐
相关产品推荐

