跳转到内容

SuperCheckbox

SuperCheckbox 是 Miuix 中的复选框组件,提供了标题、摘要和复选框控件,支持点击交互,常用于多选项设置和选择列表中。

引入

kotlin
import top.yukonga.miuix.kmp.extra.SuperCheckbox
import top.yukonga.miuix.kmp.extra.CheckboxLocation

基本用法

SuperCheckbox 组件提供了基本的复选框功能:

kotlin
var isChecked by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "复选框选项",
    checked = isChecked,
    onCheckedChange = { isChecked = it }
)

带摘要的复选框

kotlin
var notificationsEnabled by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "通知",
    summary = "接收来自应用的推送通知",
    checked = notificationsEnabled,
    onCheckedChange = { notificationsEnabled = it }
)

组件状态

禁用状态

kotlin
SuperCheckbox(
    title = "禁用复选框",
    summary = "此复选框当前不可用",
    checked = true,
    onCheckedChange = {},
    enabled = false
)

复选框位置

SuperCheckbox 支持将复选框放置在左侧或右侧:

左侧复选框(默认)

kotlin
var leftChecked by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "左侧复选框",
    summary = "复选框位于左侧(默认)",
    checked = leftChecked,
    onCheckedChange = { leftChecked = it },
    checkboxLocation = CheckboxLocation.Left // 默认值
)

右侧复选框

kotlin
var rightChecked by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "右侧复选框",
    summary = "复选框位于右侧",
    checked = rightChecked,
    onCheckedChange = { rightChecked = it },
    checkboxLocation = CheckboxLocation.Right
)

属性

SuperCheckbox 属性

属性名类型说明默认值是否必须
titleString复选框项的标题-
checkedBoolean复选框的选中状态-
onCheckedChange((Boolean) -> Unit)?复选框状态变化时的回调-
modifierModifier应用于组件的修饰符Modifier
titleColorBasicComponentColors标题文本的颜色配置BasicComponentDefaults.titleColor()
summaryString?复选框项的摘要说明null
summaryColorBasicComponentColors摘要文本的颜色配置BasicComponentDefaults.summaryColor()
checkboxColorsCheckboxColors复选框控件的颜色配置CheckboxDefaults.checkboxColors()
rightActions@Composable RowScope.() -> Unit右侧自定义内容(复选框前){}
checkboxLocationCheckboxLocation复选框的位置CheckboxLocation.Left
onClick(() -> Unit)?点击选项时触发的额外回调null
insideMarginPaddingValues组件内部内容的边距BasicComponentDefaults.InsideMargin
enabledBoolean组件是否可交互true

进阶用法

带右侧额外内容

kotlin
var backupEnabled by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "自动备份",
    summary = "定期备份您的数据",
    checked = backupEnabled,
    onCheckedChange = { backupEnabled = it },
    rightActions = {
        Text(
            text = if (backupEnabled) "已启用" else "未启用",
            color = MiuixTheme.colorScheme.onSurfaceVariantActions,
            modifier = Modifier.padding(end = 6.dp)
        )
    }
)

嵌套复选框

kotlin
var allSelected by remember { mutableStateOf(false) }
var option1 by remember { mutableStateOf(false) }
var option2 by remember { mutableStateOf(false) }
var option3 by remember { mutableStateOf(false) }

Column {
    SuperCheckbox(
        title = "选择全部",
        checked = allSelected,
        onCheckedChange = { newState ->
            allSelected = newState
            option1 = newState
            option2 = newState
            option3 = newState
        }
    )
    SuperCheckbox(
        title = "选项 1",
        checked = option1,
        onCheckedChange = { 
            option1 = it 
            allSelected = option1 && option2 && option3
        },
        modifier = Modifier.padding(start = 24.dp)
    )
    SuperCheckbox(
        title = "选项 2",
        checked = option2,
        onCheckedChange = { 
            option2 = it 
            allSelected = option1 && option2 && option3
        },
        modifier = Modifier.padding(start = 24.dp)
    )
    SuperCheckbox(
        title = "选项 3",
        checked = option3,
        onCheckedChange = { 
            option3 = it 
            allSelected = option1 && option2 && option3
        },
        modifier = Modifier.padding(start = 24.dp)
    )
}

自定义颜色

kotlin
var customChecked by remember { mutableStateOf(false) }

SuperCheckbox(
    title = "自定义颜色",
    titleColor = BasicComponentDefaults.titleColor(
        color = MiuixTheme.colorScheme.primary
    ),
    summary = "使用自定义颜色的复选框",
    summaryColor = BasicComponentDefaults.summaryColor(
        color = MiuixTheme.colorScheme.secondary
    ),
    checked = customChecked,
    onCheckedChange = { customChecked = it },
    checkboxColors = CheckboxDefaults.checkboxColors(
        checkedForegroundColor = Color.Red,
        checkedBackgroundColor = MiuixTheme.colorScheme.secondary
    )
)

结合对话框使用

kotlin
var showDialog = remember { mutableStateOf(false) }
var privacyOption by remember { mutableStateOf(false) }
var analyticsOption by remember { mutableStateOf(false) }

Scaffold {
    SuperArrow(
        title = "隐私设置",
        onClick = { showDialog.value = true },
        holdDownState = showDialog.value
    )
    
    SuperDialog(
        title = "隐私设置",
        show = showDialog,
        onDismissRequest = { showDialog.value = false } // 关闭对话框
    ) {
        Card {
            SuperCheckbox(
                title = "隐私政策",
                summary = "同意隐私政策条款",
                checked = privacyOption,
                onCheckedChange = { privacyOption = it }
            )
            
            SuperCheckbox(
                title = "分析数据",
                summary = "允许收集匿名使用数据以改进服务",
                checked = analyticsOption,
                onCheckedChange = { analyticsOption = it }
            )
        }
        
        Row(
            horizontalArrangement = Arrangement.SpaceBetween,
            modifier = Modifier.padding(top = 12.dp)
        ) {
            TextButton(
                text = "取消",
                onClick = { showDialog.value = false }, // 关闭对话框
                modifier = Modifier.weight(1f)
            )
            Spacer(Modifier.width(16.dp))
            TextButton(
                text = "确认",
                onClick = { showDialog.value = false }, // 关闭对话框
                modifier = Modifier.weight(1f),
                colors = ButtonDefaults.textButtonColorsPrimary() // 使用主题颜色
            )
        }
    }
}

基于 Apache-2.0 许可发布