跳转到内容

WindowBottomSheet

WindowBottomSheet 是窗口级的底部抽屉组件。它使用平台 Dialog 渲染,不依赖 ScaffoldMiuixPopupHost。支持大屏优化的动效、系统返回手势关闭,以及在内容内部通过组合局部请求关闭。

提示

该组件不依赖 Scaffold,可在任意 Composable 作用域中使用。

引入

kotlin
import top.yukonga.miuix.kmp.extra.WindowBottomSheet
import top.yukonga.miuix.kmp.extra.LocalWindowBottomSheetState

基本用法

WindowBottomSheet 组件提供了基础的底部抽屉功能:

kotlin
var showBottomSheet = remember { mutableStateOf(false) }

// 可以在任何地方使用
TextButton(
    text = "显示 Window 底部抽屉",
    onClick = { showBottomSheet.value = true }
)

WindowBottomSheet(
    show = showBottomSheet,
    title = "Window 底部抽屉标题",
    onDismissRequest = { showBottomSheet.value = false }
) {
    val dismiss = LocalWindowBottomSheetState.current
    Text(text = "这是 Window 底部抽屉的内容")
    TextButton(
        text = "关闭",
        onClick = { dismiss?.invoke() }
    )
}

属性

WindowBottomSheet 属性

属性名类型说明默认值是否必须
showMutableState<Boolean>控制底部抽屉显示状态的状态对象-
modifierModifier应用于底部抽屉的修饰符Modifier
titleString?底部抽屉的标题null
startAction@Composable (() -> Unit)?可选的左侧操作按钮(例如关闭按钮)null
endAction@Composable (() -> Unit)?可选的右侧操作按钮(例如提交按钮)null
backgroundColorColor底部抽屉背景色WindowBottomSheetDefaults.backgroundColor()
enableWindowDimBoolean是否启用遮罩层true
cornerRadiusDp顶部圆角半径WindowBottomSheetDefaults.cornerRadius
sheetMaxWidthDp底部抽屉的最大宽度WindowBottomSheetDefaults.maxWidth
onDismissRequest(() -> Unit)?当用户请求关闭(点击遮罩层或返回手势)时触发null
onDismissFinished(() -> Unit)?底部抽屉完全关闭(动画结束)时的回调null
outsideMarginDpSize底部抽屉外部边距WindowBottomSheetDefaults.outsideMargin
insideMarginDpSize底部抽屉内部内容的边距WindowBottomSheetDefaults.insideMargin
defaultWindowInsetsPaddingBoolean是否应用默认窗口插入内边距true
dragHandleColorColor拖拽指示器的颜色WindowBottomSheetDefaults.dragHandleColor()
allowDismissBoolean是否允许通过拖拽或返回手势关闭抽屉true
enableNestedScrollBoolean是否允许内容嵌套滚动true
content@Composable () -> Unit底部抽屉的内容-

WindowBottomSheetDefaults

WindowBottomSheetDefaults 属性

属性名类型说明
cornerRadiusDp默认圆角半径 (28.dp)
maxWidthDp默认最大宽度 (640.dp)
outsideMarginDpSize底部抽屉外部默认边距
insideMarginDpSize底部抽屉内部默认边距

WindowBottomSheetDefaults 函数

函数名返回类型说明
backgroundColor()Color获取默认背景颜色
dragHandleColor()Color获取默认拖拽指示器颜色

进阶用法

从内容中关闭

您可以使用 LocalWindowBottomSheetState 从其内容中关闭底部抽屉:

kotlin
WindowBottomSheet(
    show = showBottomSheet,
    title = "关闭示例",
    onDismissRequest = { showBottomSheet.value = false }
) {
    val dismiss = LocalWindowBottomSheetState.current
    
    Button(
        onClick = { dismiss?.invoke() }
    ) {
        Text("关闭底部抽屉")
    }
}

变更日志

基于 Apache-2.0 许可发布