WindowDialog
WindowDialog 是一个窗口级对话框组件。它基于平台 Dialog 渲染,无需依赖 Scaffold 或 MiuixPopupHost。支持大屏优化动效、系统返回手势关闭,以及在内容内部通过组合局部触发关闭。
提示
该组件不依赖 Scaffold,可在任意 Composable 作用域中使用。
引入
kotlin
import top.yukonga.miuix.kmp.extra.WindowDialog
import top.yukonga.miuix.kmp.extra.LocalWindowDialogState基本用法
kotlin
val showDialog = remember { mutableStateOf(false) }
TextButton(
text = "打开",
onClick = { showDialog.value = true }
)
WindowDialog(
title = "WindowDialog",
summary = "一个基础的窗口级对话框示例",
show = showDialog,
onDismissRequest = { showDialog.value = false }
) {
val dismiss = LocalWindowDialogState.current
TextButton(
text = "确认",
onClick = { dismiss?.invoke() },
modifier = Modifier.fillMaxWidth()
)
}属性
WindowDialog 属性
| 属性名 | 类型 | 说明 | 默认值 | 是否必须 |
|---|---|---|---|---|
| show | MutableState<Boolean> | 控制显示状态 | - | 是 |
| modifier | Modifier | 根内容修饰符 | Modifier | 否 |
| title | String? | 对话框标题 | null | 否 |
| titleColor | Color | 标题颜色 | WindowDialogDefaults.titleColor() | 否 |
| summary | String? | 对话框摘要 | null | 否 |
| summaryColor | Color | 摘要颜色 | WindowDialogDefaults.summaryColor() | 否 |
| backgroundColor | Color | 对话框背景色 | WindowDialogDefaults.backgroundColor() | 否 |
| onDismissRequest | (() -> Unit)? | 当用户请求关闭(点击遮罩层或返回手势)时触发 | null | 否 |
| onDismissFinished | (() -> Unit)? | 对话框完全关闭(动画结束)时的回调 | null | 否 |
| outsideMargin | DpSize | 相对窗口边缘的外部边距 | WindowDialogDefaults.outsideMargin | 否 |
| insideMargin | DpSize | 对话框内容内部边距 | WindowDialogDefaults.insideMargin | 否 |
| defaultWindowInsetsPadding | Boolean | 是否应用默认窗口插入内边距(输入法/导航/标题) | true | 否 |
| content | @Composable () -> Unit | 对话框内容 | - | 是 |
WindowDialogDefaults
属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| outsideMargin | DpSize | 对话框外部默认边距 |
| insideMargin | DpSize | 对话框内部默认边距 |
函数
| 函数名 | 返回类型 | 说明 |
|---|---|---|
| titleColor() | Color | 获取默认标题颜色 |
| summaryColor() | Color | 获取默认摘要颜色 |
| backgroundColor() | Color | 获取默认对话框背景颜色 |
LocalWindowDialogState
提供一个 () -> Unit 函数,用于从内容内部关闭当前弹窗。
kotlin
val state = LocalWindowDialogState.current
TextButton(
text = "关闭",
onClick = { state.invoke() }
)