Formulario de Creación de Tareas en Kotlin
Clase 12 de 19 • Curso de Jetpack Compose en Android
Resumen
¿Cómo crear un formulario para nuevas tareas en una aplicación?
Crear un formulario en una aplicación puede parecer un desafío, pero con las herramientas adecuadas y una guía clara, se convierte en una tarea manejable y entretenida. A la hora de desarrollar este formulario en Kotlin, es esencial definir los componentes que permitan al usuario ingresar la información de manera eficiente.
Para comenzar, debes crear una nueva carpeta dentro de tu directorio de "screens" que se llame, por ejemplo, "task" o "detail". Allí, crearás una nueva clase Kotlin llamada TaskScreen
que funcionará como un componente composable. Este componible recibirá un modificador y un estado.
¿Qué necesitamos para definir el estado de la pantalla de tareas?
- Nombre de la tarea (task name)
- Descripción de la tarea (task description)
- Categoría
- Estado de completitud de la tarea (task done)
Inicialmente, definiremos la clase TaskScreenState
y crearemos variables para mantener los valores de las tareas, como la categoría que puede ser opcional y si la tarea está completada o no, lo que configuraremos por defecto en false
.
data class TaskScreenState(
val taskName: String = "",
val taskDescription: String = "",
val category: String? = null,
val taskDone: Boolean = false
)
¿Cómo implementar la interfaz de usuario del formulario?
Para darle forma a la interfaz de usuario, usaremos varios componentes de Jetpack Compose:
-
Scaffold con TopBar: para el diseño inicial de la pantalla. Incluyendo un título principal con un
Text
. -
Column: sirve para organizar los componentes verticalmente mediante un espaciado de 8 unidades.
-
Row y Spacer: son útiles para colocar elementos en línea horizontal con espacio entre ellos.
Column( verticalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.padding(paddingValues).fillMaxSize() ) { // Row con Text y Checkbox Row(verticalAlignment = Alignment.CenterVertically) { Text(text = "Is Done") Spacer(modifier = Modifier.width(8.dp)) Checkbox( checked = state.taskDone, onCheckedChange = { /* Lógica para cambiar el estado */ } ) } // Texto para la selección de categoría Text(text = state.category ?: "Select Category", modifier = Modifier.selectableBorder()) }
¿Qué hacer con el menú desplegable (Dropdown Menu)?
Un DropdownMenu
permite seleccionar categorías de manera intuitiva, implementando un menú que aparece al hacer clic en un texto.
-
Icono: Indica que al hacer clic en el texto se puede desplegar un menú.
-
Menú con opciones: Cada categoría se muestra como una opción dentro del menú.
DropdownMenu( expanded = isExpanded, onDismissRequest = { isExpanded = false }) { // For each category, create a selectable text item Category.values().forEach { category -> DropdownMenuItem(onClick = { /* Acciones para seleccionar una categoría */ }) { Text(text = category.name) } } }
¿Cómo capturar datos a través de TextFields?
Para capturar el nombre y la descripción de la tarea, utilizarás BasicTextField
, que permitirá al usuario ingresar texto. Se pueden personalizar con DecorationBox
para incluir placeholders
y modifiers
para definir el estilo.
BasicTextField(
value = state.taskName,
onValueChange = { /* Cambia el nombre de la tarea */ },
textStyle = MaterialTheme.typography.headlineLarge.copy(
fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onSurface
),
decorationBox = { innerTextField ->
if (state.taskName.isEmpty()) {
Text(text = "Task Name", style = placeholderStyle)
}
innerTextField()
}
)
¿Cómo gestionar eventos interactivos con el usuario?
Aquí es donde entra en juego la lógica del ViewModel (todavía en curso de implementación), que permitirá actualizar el estado de la tarea:
-
Guardar la tarea: Se debe implementar un
Button
que al ser presionado, ejecute un método de guardado.Button( onClick = { /* Acción de guardar la tarea */ }, modifier = Modifier.fillMaxWidth().padding(16.dp) ) { Text("Save", style = MaterialTheme.typography.titleMedium) }
A medida que te familiarizas con estas herramientas y técnicas, verás lo poderoso que es Jetpack Compose para crear interfaces interactivas y personalizadas. Además, estás desarrollando habilidades que puedes aplicar a otros proyectos y expandiendo tus capacidades como desarrollador.