Aprende a crear opciones de selección múltiple
Mira este video completo para aprender a implementar CheckBox:
El componente CheckBox permite al usuario seleccionar MÚLTIPLES opciones simultáneamente. A diferencia del RadioButton (solo una opción), aquí puedes elegir todas las que necesites.
✓ Puedes seleccionar una, varias o todas las opciones
Usaremos Row para organizar el CheckBox y el Text horizontalmente:
Row(verticalAlignment = Alignment.CenterVertically) {
// CheckBox y Text alineados verticalmente
}
Necesitamos crear una variable observable por cada CheckBox. Si tienes 5 CheckBox, creas 5 variables.
mutableStateOf(false) → Crea un estado mutable observable con valor inicial false (no seleccionado)rememberSaveable → Recuerda el estado incluso cuando el usuario gira la pantallaby → Delegado que permite acceder al valor sin usar .valuevar suma by rememberSaveable { mutableStateOf(false) }
var resta by rememberSaveable { mutableStateOf(false) }
var multiplicar by rememberSaveable { mutableStateOf(false) }
Cada CheckBox necesita su propia variable porque pueden estar seleccionados independientemente. No puedes usar una sola variable para múltiples CheckBox.
El CheckBox tiene dos parámetros obligatorios:
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = suma,
onCheckedChange = {
suma = it
}
)
Text(text = "Sumar")
}
onCheckedChange(Boolean){ suma = it }it contiene el nuevo estado (true si seleccionado, false si no)suma
it es el parámetro implícito de la lambda que contiene el nuevo estado del CheckBox:
it = true → CheckBox seleccionado ✓it = false → CheckBox no seleccionado ☐Para crear varios CheckBoxes, simplemente repetimos el patrón con diferentes variables:
var suma by rememberSaveable { mutableStateOf(false) }
var resta by rememberSaveable { mutableStateOf(false) }
var multiplicar by rememberSaveable { mutableStateOf(false) }
// CheckBox Sumar
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = suma,
onCheckedChange = { suma = it }
)
Text("Sumar")
}
// CheckBox Restar
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = resta,
onCheckedChange = { resta = it }
)
Text("Restar")
}
// CheckBox Multiplicar
Row(verticalAlignment = Alignment.CenterVertically) {
Checkbox(
checked = multiplicar,
onCheckedChange = { multiplicar = it }
)
Text("Multiplicar")
}
Para evitar repetir código, creamos una función reutilizable:
@Composable
fun Check(
text: String,
isSelected: Boolean,
actualizarEstado: (Boolean) -> Unit
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
) {
Checkbox(
checked = isSelected,
onCheckedChange = {
actualizarEstado(it)
}
)
Text(
text = text,
modifier = Modifier.padding(start = 8.dp)
)
}
}
Texto personalizado para cada CheckBox ("Sumar", "Restar", etc.)
Estado actual del CheckBox (true = seleccionado, false = no seleccionado)
Callback que se invoca cuando el usuario cambia el estado. Recibe el nuevo valor y no devuelve nada.
var suma by rememberSaveable { mutableStateOf(false) }
var resta by rememberSaveable { mutableStateOf(false) }
var multiplicar by rememberSaveable { mutableStateOf(false) }
// Uso simple y limpio
Check("Sumar", suma) { suma = it }
Check("Restar", resta) { resta = it }
Check("Multiplicar", multiplicar) { multiplicar = it }
Check, se invoca actualizarEstado(it){ resta = it } que pasamos al llamar la funciónit contiene el nuevo estado (true o false)resta
Un callback es una función que se pasa como parámetro y se invoca en un momento específico.
En este caso, actualizarEstado es un callback que se invoca cuando el usuario cambia el CheckBox,
y nos permite actualizar la variable observable desde donde llamamos la función.
Row(...) {
Checkbox(...)
Text(...)
}
Row(...) {
Checkbox(...)
Text(...)
}
Row(...) {
Checkbox(...)
Text(...)
}
30+ líneas repetitivas
Check("Sumar", suma) {
suma = it
}
Check("Restar", resta) {
resta = it
}
Check("Multiplicar", m) {
multiplicar = it
}
9 líneas limpias