MVVM tradicional con Jetpack Compose y StateFlow | Por Anastasia Finogenova | Enero de 2022

En la capa de ViewModel, presentaremos UI State, que será una clase sellada para todos los posibles estados de View, para alertar a View de los cambios de estado y para respaldar la noción de que ViewModel es la fuente de la verdad para nuestro estado de UI.
Como puede ver, enumeramos todos los estados de la interfaz de usuario que esperamos como clases selladas. Esto hará que nuestra sintaxis y manejo de estados sean más fáciles en el futuro.
Este estado se publicará a través de StateFlow para que la vista pueda recopilar y recibir notificaciones de los cambios. Tendremos un MutableStateFlow y un campo de respaldo en ViewModel para encapsular la mutabilidad del productor en la clase ViewModel.
A continuación, podemos implementar la lógica para consultar datos del repositorio y actualizar el estado de la interfaz de usuario.
Algo está sucediendo aquí. Vamos a desglosarlo línea por línea.
Comenzamos activando el estado como Cargando para mostrar nuestra interfaz de usuario de progreso.
_uiState.value = WeatherUiState.Loading
Luego llamamos a nuestra diversión en pausa desde el repositorio que devuelve el objeto de respuesta. Ahora podemos analizarlo y establecer el estado de la interfaz de usuario en Cargado para mostrar los datos de manera adecuada.
Por ejemplo, si encontramos una excepción, también la configuraremos en el flujo de estado de la interfaz de usuario de esta manera.
_uiState.value = WeatherUiState.Error( applicationContext.getString(R.string.query_limit_reached)
)