Saltar a contenido

A5 · Ejercicios de formularios

Todos los formularios deben usar el teclado adecuado a cada campo y mostrar los errores solo cuando el usuario haya escrito algo.

Ejercicio A5.1

Hola, nombre. Un OutlinedTextField y un texto que muestre «Hola, …» con lo que se escribe, en tiempo real.

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

@Composable
fun HolaNombre() {
    var nombre by remember { mutableStateOf("") }
    Column(Modifier.padding(16.dp)) {
        OutlinedTextField(
// ... (resto de la solución bloqueado)

Ejercicio A5.2

Teclados. Tres campos (correo, teléfono, número) y comprueba que cada uno saca un teclado distinto.

Ejercicio A5.3

Contraseña con ojo. Campo de contraseña con un icono que muestre u oculte lo escrito.

Ejercicio A5.4

Preferencias. Un Switch de «Notificaciones», un Checkbox de «Recibir novedades» y un grupo de tres RadioButton para elegir el idioma. Debajo, un resumen de lo elegido.

Ejercicio A5.5

Volumen y brillo. Dos Slider con su porcentaje a la derecha. El brillo debe ir de 10 a 100.

Ejercicio A5.6

Elige ciudad. Un menú desplegable con cinco ciudades. Al elegir una, aparece en el botón.

Ejercicio A5.7

Confirmar borrado. Un botón «Borrar cuenta» abre un AlertDialog con «Cancelar» y «Borrar». Al borrar, muestra un Snackbar con la opción «Deshacer».

Ejercicio A5.8

Registro. Formulario con nombre, correo, edad (16–99) y casilla de condiciones. El botón «Registrarme» solo está activo si todo es válido y los errores aparecen bajo cada campo.

Ejercicio A5.9

⭐ Reto: calculadora de IMC. Dos campos (peso en kg y altura en cm), validación numérica y un botón que muestre el IMC y la categoría (bajo peso, normal, sobrepeso, obesidad).

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

@Composable
fun CalculadoraImc() {
    var peso by remember { mutableStateOf("") }
    var altura by remember { mutableStateOf("") }
    val p = peso.replace(',', '.').toDoubleOrNull()
// ... (resto de la solución bloqueado)

Ejercicio A5.10

⭐ Reto: el estado en una clase. Reescribe A5.8 agrupando todos los datos en una data class RegistroUi y la validación en funciones que reciban esa clase.