Aprende a crear opciones de selección única
Mira este video paso a paso para aprender a crear RadioButtons:
El RadioButton es un componente que permite al usuario seleccionar UNA opción entre varias. Es ideal para preguntas de opción múltiple o configuraciones donde solo se puede elegir una alternativa.
Primero aprenderemos a crear un RadioButton simple:
var selectedOption by rememberSaveable { mutableStateOf("sumar") }
Esta variable guarda la opción seleccionada actualmente.
Row organiza los elementos horizontalmente (uno al lado del otro).
Trabaja sobre el eje secundario (vertical) para centrar los elementos verticalmente dentro del Row.
Row(
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
selected = selectedOption == "sumar",
onClick = {
selectedOption = "sumar"
}
)
Text("Sumar")
}
selected compara si "sumar" == selectedOptiontrue → RadioButton se muestra seleccionadoselectedOption = "sumar"Ahora veamos cómo crear varios RadioButtons para múltiples opciones:
var selectedOption by rememberSaveable { mutableStateOf("sumar") }
// Opción 1: Sumar
Row(verticalAlignment = Alignment.CenterVertically) {
RadioButton(
selected = selectedOption == "sumar",
onClick = { selectedOption = "sumar" }
)
Text("Sumar")
}
// Opción 2: Restar
Row(verticalAlignment = Alignment.CenterVertically) {
RadioButton(
selected = selectedOption == "restar",
onClick = { selectedOption = "restar" }
)
Text("Restar")
}
// Opción 3: Multiplicar
Row(verticalAlignment = Alignment.CenterVertically) {
RadioButton(
selected = selectedOption == "multiplicar",
onClick = { selectedOption = "multiplicar" }
)
Text("Multiplicar")
}
Este código funciona, pero tiene mucha repetición. ¡Hay una forma más eficiente!
val opciones = listOf("sumar", "restar", "multiplicar")
var optionSelected by rememberSaveable {
mutableStateOf(opciones.first()) // Primer elemento
}
opciones.forEach { opcion ->
Row(verticalAlignment = Alignment.CenterVertically) {
RadioButton(
selected = optionSelected == opcion,
onClick = { optionSelected = opcion }
)
Text(text = opcion)
}
}
Con este código obtenemos el mismo resultado que antes, pero de forma mucho más elegante y mantenible. Si necesitas agregar más opciones, solo modificas la lista.
El siguiente paso es crear una función que puedas usar en cualquier parte de tu aplicación:
@Composable
fun RadioButtonUi(
lista: List<String>,
selectedOption: String,
onClick: (String) -> Unit
) {
lista.forEach { option ->
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
) {
RadioButton(
selected = selectedOption == option,
onClick = { onClick(option) }
)
Text(
text = option,
modifier = Modifier.padding(start = 8.dp)
)
}
}
}
val opciones = listOf("sumar", "restar", "multiplicar")
var optionSelected by rememberSaveable {
mutableStateOf(opciones.first())
}
RadioButtonUi(
lista = opciones,
selectedOption = optionSelected,
onClick = { item ->
optionSelected = item
}
)
onClick(option) dentro de RadioButtonUi{ item -> optionSelected = item }optionSelected con el nuevo valorUn RadioButton individual con su propia lógica.
Row {
RadioButton(...)
Text("Opción")
}
3 líneas/opción
Itera sobre una lista para crear múltiples opciones.
opciones.forEach {
Row {
RadioButton(...)
}
}
1 bloque para todas
Componente que se puede usar en toda la app.
RadioButtonUi(
lista = opciones,
...
)
Profesional