Pantrix UI

Checkbox

Bir onay kutusu: işaretli ya da boş bir kutu ve o kutunun etiketi.

import com.pantrixui.components.elements.checkbox.PantrixCheckbox

Örnekler

Etiket ve yardım metni

En yalın hâli: checked durumu okur, onCheckedChange istenen değeri bildirir. label kutunun yanında, supportingText altında durur ve üçü tek bir hedeftir. Yazıya bas: kutu yine değişir.

var newsletter by rememberSaveable { mutableStateOf(true) }
PantrixCheckbox(
    checked = newsletter,
    onCheckedChange = { newsletter = it },
    label = "Haftalık bülten",
    supportingText = "Haftada bir e-posta; istediğiniz zaman bırakabilirsiniz",
    tagKey = "newsletter"
)

Üç durum: tümünü seç

PantrixTriStateCheckbox üçüncü bir durumu çizer. Altındaki kutuların bir kısmı seçiliyken "Tüm bildirimler" ne işaretli ne boştur: bir çizgi gösterir ve ekran okuyucuya öyle okunur.

Durumu kutu değil, çağıran hesaplar: hepsi seçiliyse On, hiçbiri seçili değilse Off, arada Indeterminate. onClick yalnızca basıldığını bildirir; burada hepsini seçer, hepsi seçiliyken hepsini bırakır.

val notifications = listOf("Kargo durumu", "Kampanyalar", "Hesap güvenliği")
var chosen by remember { mutableStateOf(setOf(notifications.first())) }
val all = when (chosen.size) {
    0 -> ToggleableState.Off
    notifications.size -> ToggleableState.On
    else -> ToggleableState.Indeterminate
}
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.xs)) {
    PantrixTriStateCheckbox(
        state = all,
        onClick = { chosen = if (all == ToggleableState.On) emptySet() else notifications.toSet() },
        label = "Tüm bildirimler",
        tagKey = "all_notifications"
    )
    Column(modifier = Modifier.padding(start = PantrixTheme.spacing.xl)) {
        notifications.forEachIndexed { index, name ->
            PantrixCheckbox(
                checked = name in chosen,
                onCheckedChange = { on -> chosen = if (on) chosen + name else chosen - name },
                label = name,
                tagKey = "notification_$index"
            )
        }
    }
}

Hata

error kutuyu ve yardım metnini temanın danger rolüne çevirir ve ekran okuyucuya girdinin geçersiz olduğu söylenir. Hata sürerken yardım metni mesajın kendisidir: neyin düzeltileceğini o söyler.

Burada hatayı örnek kendisi hesaplar: kutu boşken error true'dur. Kutuyu işaretle: renk ve metin eski hâline döner.

var read by rememberSaveable { mutableStateOf(false) }
PantrixCheckbox(
    checked = read,
    onCheckedChange = { read = it },
    label = "Gizlilik bildirimini okudum",
    supportingText = if (read) "Teşekkürler" else "Devam etmek için bu kutuyu işaretleyin",
    error = !read,
    tagKey = "privacy"
)

Bir forma bağlı onay

field alan PantrixCheckbox bir formun alanına bağlıdır: değerini, hatasını ve adını alandan alır; checked ve onCheckedChange verilmez. Alanın kimliği otomasyon anahtarıdır: bu kutu Checkbox_terms'tir.

Kutuyu işaretlemeden "Gönder"e bas: Rules.mustBeTrue kuralının mesajı yardım metninin yerine geçer ve odak kutuya gider. Kutu işaretlenince mesaj kalkar; form gönderilince uygulamanın snackbar'ı haber verir.

val snackbars = LocalPantrixSnackbars.current
val scope = rememberCoroutineScope()
val form = rememberFormState()
PantrixCheckbox(
    field = form.field("terms", initial = false, Rules.mustBeTrue("Devam etmek için koşulları kabul edin")),
    label = "Kullanım koşullarını kabul ediyorum",
    supportingText = "Göndermeden önce okuyabilirsiniz"
)
PantrixButton(
    text = "Gönder",
    onClick = {
        scope.launch { form.submit { snackbars?.show(message = "Form gönderildi", tagKey = "form_sent") } }
    },
    form = form,
    tagKey = "send"
)

Devre dışı ve salt okunur

enabled = false kutuyu devre dışı renklerle çizer: kutu basış almaz ve ekran okuyucuya devre dışı olduğu söylenir.

onCheckedChange = null ise kutu salt okunurdur: basış ve odak almaz, renkleri değişmez, adını ve durumunu yine söyler. Yalnızca neyin seçildiğini göstermek içindir.

PantrixCheckbox(checked = true, onCheckedChange = {}, enabled = false, label = "Devre dışı", tagKey = "off")
PantrixCheckbox(
    checked = true,
    onCheckedChange = null,
    label = "Salt okunur",
    supportingText = "Basılmaz; yalnızca durumunu gösterir",
    tagKey = "read_only"
)

Etiketsiz: bir listenin satırında

Etiketi olmayan kutu: bir tablonun ya da bir listenin satırında yazı zaten satırın içindedir. Kutunun adını ekran okuyucuya contentDescription söyler: "1042 numaralı siparişi seç".

Satırdaki yazı kutunun parçası değildir: basılan yer kutu ve çevresinde ayrılan dokunma hedefidir.

var selected by rememberSaveable { mutableStateOf(setOf("1042")) }
Column(modifier = Modifier.widthIn(max = 360.dp)) {
    listOf("1042", "1043", "1044").forEach { number ->
        Row(
            horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
            verticalAlignment = Alignment.CenterVertically
        ) {
            PantrixCheckbox(
                checked = number in selected,
                onCheckedChange = { on -> selected = if (on) selected + number else selected - number },
                contentDescription = "$number numaralı siparişi seç",
                tagKey = "order_$number"
            )
            PantrixText(text = "Sipariş $number", modifier = Modifier.weight(1f))
            PantrixText(text = "Hazırlanıyor", color = PantrixTheme.colors.textSecondary)
        }
    }
}
PantrixText(text = "${selected.size} sipariş seçili", color = PantrixTheme.colors.textSecondary)

Kendi renkleri

colors yalnızca verilen alanları değiştirir: "Hediye paketi" kutusunun dolgusu uygulamanın kendi morundadır, işareti o morun üstünde okunan renktedir; kenarı temanın renginde kalır. Kutuyu boşalt: kenarı öteki kutularınkiyle aynıdır.

Bu renkler basılabilen ve hatasız bir kutunundur. İkinci kutuya da aynı renkler verildi, ama devre dışıdır: temanın devre dışı renkleriyle çizilir. Hatalı bir kutu da temanın danger rolünde kalır.

val own = ownColors()
var giftWrap by rememberSaveable { mutableStateOf(true) }
PantrixCheckbox(
    checked = giftWrap,
    onCheckedChange = { giftWrap = it },
    label = "Hediye paketi",
    supportingText = "Kutunun dolgusu ve işareti dışarıdan verildi",
    colors = CheckboxColors(checked = own.color, checkmark = own.onColor),
    tagKey = "gift_wrap"
)
PantrixCheckbox(
    checked = true,
    onCheckedChange = {},
    enabled = false,
    label = "Hediye notu",
    supportingText = "Aynı renkler verildi; devre dışı kutu temanın renginde kalır",
    colors = CheckboxColors(checked = own.color, checkmark = own.onColor),
    tagKey = "gift_note"
)

Stil

style tek bir kutunun geometrisini değiştirir: size kutunun boyu, shape köşeleri, strokeWidth kenarın ve işaretin çizgi kalınlığıdır. Yalnızca verilen alanlar değişir; gerisi temanın ve platformun stilinden gelir.

İlk kutu 24dp'dir ve çizgisi 3dp; ikincinin köşeleri yuvarlatılmamıştır. Kutunun rengi stilin parçası değildir: o durumdan ve colors'tan gelir.

var large by rememberSaveable { mutableStateOf(true) }
var square by rememberSaveable { mutableStateOf(true) }
PantrixCheckbox(
    checked = large,
    onCheckedChange = { large = it },
    label = "Büyük kutu, kalın çizgi",
    style = CheckboxStyle(size = 24.dp, strokeWidth = 3.dp),
    tagKey = "large"
)
PantrixCheckbox(
    checked = square,
    onCheckedChange = { square = it },
    label = "Köşeli kutu",
    style = CheckboxStyle(shape = ShapeSpec.Fixed(RectangleShape)),
    tagKey = "square"
)

Kutu sonda

Kutu etiketin sonunda (controlPosition = ControlPosition.End): bir listenin seçenekleri, kutular sütunun sonunda alt alta. Satırlar sütunun genişliğini alır (Modifier.fillMaxWidth()).

var photos by rememberSaveable { mutableStateOf(true) }
var contacts by rememberSaveable { mutableStateOf(false) }
Column(Modifier.widthIn(max = 360.dp)) {
    PantrixCheckbox(
        checked = photos,
        onCheckedChange = { photos = it },
        modifier = Modifier.fillMaxWidth(),
        label = "Fotoğrafları yedekle",
        tagKey = "photos_end",
        controlPosition = ControlPosition.End
    )
    PantrixCheckbox(
        checked = contacts,
        onCheckedChange = { contacts = it },
        modifier = Modifier.fillMaxWidth(),
        label = "Kişileri yedekle",
        tagKey = "contacts_end",
        controlPosition = ControlPosition.End
    )
}

API

checked

Bir onay kutusu: işaretli ya da boş bir kutu ve o kutunun etiketi.

ParametreTürVarsayılanNe olduğu
checkedBooleanKutunun işaretli olup olmadığı.
onCheckedChange((Boolean) -> Unit)?Kullanıcının istediği değerle, checked'in tersiyle çağrılır. Onay kutusu kendiliğinden bir şey değiştirmez: checked öyle diyorsa işaretlidir. Null onu salt okunur yapar.
modifierModifierModifierSatırın modifier'ı.
enabledBooleantrueOnay kutusunun değiştirilip değiştirilemediği. Değiştirilemeyen kutu devre dışı renklerle çizilir ve devre dışı olduğunu söyler.
labelString?nullKutunun yanındaki yazı: hedefin bir parçasıdır ve ekran okuyucu için onay kutusunun adıdır.
supportingTextString?nullEtiketin altında, daha küçük bir yazıyla duran yardım. error true iken mesajın kendisidir.
errorBooleanfalseDeğerin yanlış olup olmadığı. Yanlışsa kutu ve yardım metni danger rolüne döner, ekran okuyucuya girdinin geçersiz olduğu söylenir.
styleCheckboxStyle?nullBu çağrının kendi stili: çevresindeki her stili ezer, yoğunluk ona da uygulanır. Yalnızca verdiği alanlar değişir ve her platformda değişir.
colorsCheckboxColors?nullBu onay kutusunun kendi renkleri. Verdiği renkler kullanılır, gerisi temadan gelir. Devre dışı kutu ve hatalı kutu temanın renklerinde kalır.
contentDescriptionString?nullEkran okuyucunun onay kutusu için söylediği: bir tablo satırındaki gibi label verilmeyen kutunun adıdır ya da etiketin yerine okunur.
tagKeyString?nullOnay kutusunun otomasyon anahtarı: satır Checkbox_<tagKey> etiketini taşır. Her değişiklik bir Checkbox olayı olarak bildirilir: olay kutunun basıldığı andaki durumunu taşır, etiketini hiçbir zaman taşımaz.
interactionSourceMutableInteractionSource?nullOnay kutusunun dışarı taşınan etkileşimleri. Null verilirse kutu kendi kaynağını tutar.
controlPositionControlPositionControlPosition.Startkutunun durduğu yer: bir seçenek listesindeki gibi etiketin önü ya da arkası. Arkasındaysa kutu satıra verilen genişliğin sonunda durur, Modifier.fillMaxWidth() onu ötekilerle hizalar; satıra genişlik verilmemişse etiketin hemen ardındadır. Etiket kutunun bıraktığı yerde sarar.

field

Bir formun alanına bağlı onay kutusu: değeri, hatası ve adı field'dan gelir.

ParametreTürVarsayılanNe olduğu
fieldFormField<Boolean>Onay kutusunun gösterdiği ve değiştirdiği alan.
modifierModifierModifierSatırın modifier'ı.
enabledBooleantrueOnay kutusunun değiştirilip değiştirilemediği.
labelString?nullKutunun yanındaki yazı: hedefin bir parçasıdır ve ekran okuyucu için onay kutusunun adıdır.
supportingTextString?nullAlanın orada gösterecek bir hatası yokken etiketin altında duran yardım.
styleCheckboxStyle?nullBu çağrının kendi stili: çevresindeki her stili ezer, yoğunluk ona da uygulanır. Yalnızca verdiği alanlar değişir ve her platformda değişir.
colorsCheckboxColors?nullBu onay kutusunun kendi renkleri. Verdiği renkler kullanılır, gerisi temadan gelir. Devre dışı kutu ve hatalı kutu temanın renklerinde kalır.
contentDescriptionString?nullEkran okuyucunun, label verilmeyen onay kutusu için ya da etiketin yerine söylediği.
controlPositionControlPositionControlPosition.Startkutunun durduğu yer: bir seçenek listesindeki gibi etiketin önü ya da arkası. Arkasındaysa kutu satıra verilen genişliğin sonunda durur, Modifier.fillMaxWidth() onu ötekilerle hizalar; satıra genişlik verilmemişse etiketin hemen ardındadır. Etiket kutunun bıraktığı yerde sarar.

CheckboxStyle

PantrixCheckbox'un kutusu: boyu, köşeleri ve kenarı.

ParametreTürVarsayılanNe olduğu
sizeDpDp.UnspecifiedKutunun genişliği ve yüksekliği, kenarıyla birlikte.
shapeShapeSpecShapeSpec.UnspecifiedKutunun köşeleri: markanın şekil ölçeğinin bir adımı. Böylece köşeleri keskin olan bir markanın kutuları da keskin köşeli olur.
strokeWidthDpDp.UnspecifiedKutunun kenarının kalınlığı. İşaret ve çizgi de bu kalınlıkta çizilir.

CheckboxColors

Temanın renklerini almayan bir onay kutusu için PantrixCheckbox'un boyandığı renkler: verilen renk kullanılır, verilmeyen temanın rolünde kalır. Bir ürün yalnızca değiştirdiği renkleri verir:

ParametreTürVarsayılanNe olduğu
checkedColorColor.Unspecifiedİşaretli ya da belirsiz kutunun dolgusu. Temanın primary rengi.
checkmarkColorColor.UnspecifiedDolgunun üstündeki işaret ve çizgi: checked'in üstünde okunan renk. Primary rolünün onColor'ı.
borderColorColor.Unspecifiedİşaretli olmayan kutunun kenarı. Temanın borderStrong rengi: boş bir kutu kenarından ibarettir.

Erişilebilirlik