Creación de ViewModels para Interacción en Onboarding de Apps

Clase 6 de 20Curso de Patrones MVVM en Android

Resumen

La interacción con los ViewModels es un paso crucial para darle vida a nuestra aplicación. Para manejar distintas funcionalidades, se han creado paquetes esenciales, como uno para la navegación y otro para las preferencias por defecto, que forma parte del módulo core de nuestra aplicación.

Aquí se implementaron los shared preferences de Android, fundamentales para almacenar datos importantes del usuario como la edad, el peso, el objetivo, entre otros. Este módulo garantiza que la información necesaria esté guardada de cara a futuras interacciones y operaciones de cálculo.

¿Cómo establecemos la conexión entre lógicas de negocio y ViewModels?

En la capa de dominio del módulo core, se crean modelos que encapsulan la lógica del negocio de la aplicación y se conectan a los ViewModels. Estos modelos incluyen:

  • Activity Level: Este determina el tipo de nivel de actividad insertado por el usuario.
  • Gender: Permite determinar el género seleccionado por el usuario, mapeando valores a través de objetos Kotlin.
  • UserInfo: Una data class que contiene toda la información del usuario recopilada durante el proceso de onboarding.

Estas clases permiten un mapeo efectivo entre los modelos de dominio y los ViewModels, facilitando así una transición suave de datos desde la entrada del usuario hasta la lógica detrás de la aplicación.

El onboarding requiere de casos de uso específicos para validar y filtrar la información ingresada por el usuario, esto mejora no solo la experiencia del usuario, sino también la integridad de los datos recogidos.

¿Cómo se valida y filtra la información del usuario?

  1. Caso de uso 'Validar Nutrientes': Este es crucial para determinar si el objetivo del usuario es ganar, perder o mantener su peso, basándose en los nutrientes ingresados durante la etapa de onboarding. Esta lógica se aplicará más adelante, cuando se desarrollen los cálculos en la pantalla de inicio.

  2. Caso de uso 'Filter Out Digits': Diseñado para filtrar los inputs de texto del usuario, permitiendo asegurarse de que los valores ingresados sean solo dígitos, lo cual evita errores al establecer parámetros como edad, peso o altura durante el onboarding.

Con estos casos establecidos, se agilizan las operaciones y se asegura una experiencia de usuario fluida.

¿Cómo creamos y gestionamos los ViewModels?

Un punto de partida eficaz para nuestros ViewModels es la creación del GenderViewModel. Los ViewModels son clave para gestionar los datos asociados a la UI, facilitando así una navegación adecuada y el manejo eficiente de los eventos.

Implementación del GenderViewModel

El GenderViewModel es responsable de manejar la selección de género por parte del usuario. Se inicia con un valor por defecto, en este caso hombre, utilizando una variable de tipo mutableStateOf que gestiona los estados mutables del UI. Aquí algunos pasos básicos para su implementación:

class GenderViewModel : ViewModel() {
    private val _selectedGender = mutableStateOf(Gender.MALE)
    val selectedGender: State = _selectedGender

    fun onGenderClick(newGender: Gender) {
        _selectedGender.value = newGender
    }
}

Esta estructura básica del GenderViewModel gestiona los eventos del usuario y asegura que solo se pueda seleccionar una opción de género a la vez.

Inyección y navegación en el Gender Screen

Para incorporar este ViewModel en el Gender Screen, se realiza una inyección manual en el Navigation Root, configurando adecuadamente el comportamiento de la pantalla. Así, cuando el usuario interactúa, el estado cambia de manera consistente y permite la navegación hacia la pantalla siguiente si la selección del género es exitosa.

@Composable
fun GenderScreen(viewModel: GenderViewModel) {
    // ...
    val currentGender by viewModel.selectedGender.observeAsState(initial = Gender.MALE)
    // UI components reacting to `currentGender` changes
}

Esta integración garantiza que el flujo de datos del ViewModel se refleje adecuadamente en la interfaz, respetando siempre las acciones del usuario.

La implementación de ViewModels implica una cuidadosa planificación y una integración efectiva para mejorar la experiencia del usuario y la estabilidad del sistema. Continúa involucrándote con estos conceptos y considera aportar tu experiencia al proyecto para consolidar lo aprendido y explorar nuevas oportunidades de aprendizaje.