跳转到内容

SecurityDialog ​

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

提供两种形态:

  • OverlaySecurityDialog — 渲染在 Scaffold 的 COUIPopupHost 中 (必须在 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 许可发布