跳转到内容

SecurityDialog

SecurityDialog 是安全声明对话框, 对应 ColorOS 的 COUISecurityAlertDialogBuilder (coui_security_alert_dialog_statement_or_checkbox.xml): 在常规对话框基础上扩展声明文字段落 (含可点击链接)、「不再提醒」勾选行, 以及取消 / 确认双按钮 (无填充强调色文字按钮)。

提供两种形态:

  • OverlaySecurityDialog — 渲染在 ScaffoldCOUIPopupHost 中 (必须在 Scaffold 内使用)。
  • WindowSecurityDialog — 渲染在窗口层级, 无需 Scaffold

前提条件

OverlaySecurityDialog 依赖 Scaffold 提供的 COUIPopupHost 渲染弹窗内容。没有 Scaffold 时请使用 WindowSecurityDialog

引入

kotlin
import io.github.suqi8.coui.kmp.overlay.OverlaySecurityDialog
// 或
import io.github.suqi8.coui.kmp.window.WindowSecurityDialog

import io.github.suqi8.coui.kmp.layout.SecurityDialogDefaults
import io.github.suqi8.coui.kmp.layout.SecurityDialogColors

基本用法

kotlin
var showDialog by remember { mutableStateOf(false) }

Scaffold {
    TextButton(
        text = "显示安全声明弹窗",
        onClick = { showDialog = true }
    )

    OverlaySecurityDialog(
        show = showDialog,
        title = "安全提示",
        summary = "该功能需要连接网络。",
        statement = "点击查看隐私政策了解更多信息。",
        statementLinkText = "隐私政策",
        onLinkClick = { /* 打开隐私政策 */ },
        onConfirm = { dontRemind ->
            showDialog = false
            if (dontRemind) { /* 持久化用户选择 */ }
        },
        onCancel = { showDialog = false }
    )
}
  • statement 中与 statementLinkText 相同的子串会以强调色渲染, 点按时回调 onLinkClick
  • 点击外部与按返回键均回调 onCancel, 对应 COUI 将返回键上报为负向选择的行为。
  • 传入 checkboxText = null 可隐藏勾选行 (等价于 setHasCheckBox(false))。

属性

OverlaySecurityDialog / WindowSecurityDialog 属性

属性名类型说明默认值必需
showBoolean是否显示对话框-
onConfirm(Boolean) -> Unit点击确认按钮时回调, 携带当前勾选状态-
onCancel() -> Unit点击取消按钮、点击外部或按返回键时回调-
modifierModifier应用于对话框的修饰符Modifier
titleString?对话框标题null
summaryString?对话框摘要 (message)null
statementString?声明文字段落; 为 null 时隐藏null
statementLinkTextString?statement 中渲染为可点击链接的子串null
onLinkClick(() -> Unit)?点击声明链接时回调null
checkboxTextString?勾选行文字; 为 null 时隐藏SecurityDialogDefaults.CheckboxText
initialCheckedBoolean初始勾选状态, 每次显示对话框时重新应用false
confirmTextString确认 (positive) 按钮文字SecurityDialogDefaults.ConfirmText
cancelTextString取消 (negative) 按钮文字SecurityDialogDefaults.CancelText
titleColorColor标题颜色DialogDefaults.titleColor()
summaryColorColor摘要颜色DialogDefaults.summaryColor()
backgroundColorColor对话框背景色DialogDefaults.backgroundColor()
colorsSecurityDialogColors声明、链接与勾选文字的颜色SecurityDialogDefaults.securityDialogColors()
enableWindowDimBoolean是否启用背景遮罩true
onDismissFinished(() -> Unit)?隐藏动画完成后回调null
renderInRootScaffoldBoolean是否渲染在根 (最外层) Scaffold 中 (仅 OverlaySecurityDialog)true

SecurityDialogDefaults 对象

属性

属性名类型说明
CheckboxTextString默认勾选行文字 ("Don't remind me again")
ConfirmTextString默认确认按钮文字 ("OK")
CancelTextString默认取消按钮文字 ("Cancel")

函数

函数名返回类型说明
securityDialogColors()SecurityDialogColors创建默认的声明 / 链接 / 勾选文字颜色

SecurityDialogColors 属性

属性名类型说明
statementColorColor声明文字颜色 (次级标签色)
linkColorColor链接颜色 (强调色, 按下时 30% 透明度)
checkboxTextColorColor勾选文字颜色 (次级标签色)

进阶用法

不带声明与勾选行

kotlin
OverlaySecurityDialog(
    show = showDialog,
    title = "开启功能",
    summary = "是否开启该功能?",
    checkboxText = null, // 隐藏勾选行
    onConfirm = { _ -> showDialog = false },
    onCancel = { showDialog = false }
)

自定义文案与初始状态

kotlin
OverlaySecurityDialog(
    show = showDialog,
    title = "流量使用提醒",
    statement = "详情请查看用户协议。",
    statementLinkText = "用户协议",
    checkboxText = "不再询问",
    initialChecked = true,
    confirmText = "同意",
    cancelText = "不同意",
    onConfirm = { dontRemind -> showDialog = false },
    onCancel = { showDialog = false }
)

变更日志

基于 Apache-2.0 许可发布