Creación de Componentes de Pantalla para Trackers en Composable UI

Clase 10 de 20Curso de Patrones MVVM en Android

Resumen

El selector de días es uno de los componentes fundamentales en nuestro tracker. Este permite que el usuario navegue entre días fácilmente para monitorear su ingesta diaria.

Para construirlo, empezamos creando el componente DaySelector que recibe parámetros como la fecha (de tipo LocalDate), junto con acciones Lambda para ir hacia adelante y atrás en el calendario. Usamos una Row que aloja tres elementos principales: dos IconButton para navegar y un Text para mostrar la fecha actual, estilizada a nuestro gusto.

@Composable
fun DaySelector(
    date: LocalDate,
    onPreviewClick: () -> Unit,
    onNextClick: () -> Unit,
    modifier: Modifier = Modifier
) {
    // Column y configuración del selector...
}

Este selector permite personalizar la forma de presentación de la fecha transformándola en un formato agradable y claro, utilizando un nuevo composable parseDateText.

¿Cómo se integran y visualizan los previews?

Utilizar previews es esencial para verificar en tiempo real cómo se visualizan los componentes. La correcta implementación de previews te permitirá visualizar inmediatamente los cambios realizados en el UI, haciendo mucho más eficiente el ciclo de desarrollo.

@Preview
@Composable
fun DaySelectorPreview() {
    MyTheme {
        DaySelector(
            date = LocalDate.now(),
            onPreviewClick = {},
            onNextClick = {}
        )
    }
}

¿Qué es la clase sellada MealType?

En nuestra aplicación, hemos desarrollado una clase sellada MealType que categoriza los tipos de comidas: desayuno, almuerzo, cena y snacks. Esta categoriza a cada tipo de comida con un nombre específico, facilitando el uso y acceso mediante funciones de extensión.

sealed class MealType {
    // Definición de objetos Breakfast, Lunch, Dinner, Snack...
}

¿Cómo se expande la información de comida (Expandable Meal)?

Al implementar el ExpandableMeal, tenemos el objetivo de visualizar detalles extensos de una comida específica, incluyendo nutrientes como carbohidratos, proteínas y grasas. Creemos un nuevo Composable ExpandableMeal, que recibe un objeto comida y permite expandir o colapsar la vista para mostrar más detalles.

@Composable
fun ExpandableMeal(
    meal: Meal,
    onToggleClick: () -> Unit,
    modifier: Modifier = Modifier
) {
    // Código del diseño del ExpandableMeal...
}

¿Cuáles clases utilitarias y modelos están involucrados?

En la implementación del selector de comidas, la clase utilitaria Meal juega un papel vital. Define el modelo de datos que incluye propiedades como el meal type, el nombre, las calorías y sus macronutrientes. Estas estructuras de datos permiten manejar la visualización y funcionalidad de las comidas.

¿Cómo se integra el día y el selector de comidas dentro de Tracker Overview Screen?

Finalmente, integramos el DaySelector y ExpandableMeal en nuestra pantalla principal TrackerOverviewScreen, asegurándonos de que cada uno se visualice correctamente y funcione de manera cohesiva. Utilizamos las previews para confirmar su correcta implementación visual.

Con estas prácticas, no solo desarrollarás componentes efectivos, sino que también optimizarás su integración mediante un diseño modular y reutilizable. Continúa desarrollando tu aplicación con confianza, aprovechando la modularidad y las previews para perfeccionar cada componente a la perfección. ¡Sigue avanzando!