Aplicación de ejemplo que muestra el clima actual utilizando el patrón de arquitectura MVVM (Model-View-ViewModel) en Flutter. Esta aplicación obtiene datos meteorológicos de Open-Meteo API y los muestra en una interfaz limpia y responsiva.
La carpeta src/ contiene todo el código fuente de la aplicación, organizado siguiendo el patrón MVVM:
di/: Configuración de inyección de dependenciasservice_locator.dart: Configuración de GetIt para la inyección de dependencias
interfaces/: Contratos/interfaces para los repositoriosweather_repository_interface.dart: Interfaz que define el contrato para el repositorio de clima
models/: Modelos de datosweather.dart: Modelo principal de datos meteorológicoscurrent_weather.dart: Modelo para los datos del clima actual
network/: Implementaciones de fuentes de datosweather_repository_implement.dart: Implementación concreta del repositorio de clima que maneja la obtención de datos
enums/: Enumeracionesstatus.dart: Estados de la UI (loading, success, error)
screens/weather/: Pantallas de la aplicaciónweather_screen.dart: Vista principal (View)weather_viewmodel.dart: ViewModel que maneja la lógica de presentaciónweather_uistate.dart: Estado de la UI manejado por el ViewModel
- Responsabilidad:
- Modelos de Datos: Representan las estructuras de datos de la aplicación
- Repositorios: Manejan el acceso a los datos, ya sea desde API, base de datos local, etc.
- Ubicación:
- Modelos:
lib/src/data/models/ - Repositorios:
lib/src/data/network/(implementación) ylib/src/data/interfaces/(interfaces)
- Modelos:
- Ejemplos:
weather.dart- Modelo de datosweather_repository_interface.dart- Contrato del repositorioweather_repository_implement.dart- Implementación del repositorio
- Responsabilidad: Mostrar la interfaz de usuario y capturar interacciones
- Ubicación:
lib/src/ui/screens/ - Ejemplo:
weather_screen.dart
- Responsabilidad:
- Actuar como intermediario entre la View y el Model
- Mantener el estado de la UI
- Contener la lógica de presentación
- Ubicación:
lib/src/ui/screens/weather/ - Ejemplo:
weather_viewmodel.dart- Lógica de presentaciónweather_uistate.dart- Estado de la UI
-
Dependencias principales:
provider: ^6.0.5 dio: ^5.0.0 get_it: ^7.6.0
-
Configuración:
- La URL base de la API está configurada en
service_locator.dart - Los timeouts están configurados a 10 segundos
- La URL base de la API está configurada en
- Clona el repositorio
- Ejecuta
flutter pub getpara instalar las dependencias - Ejecuta la aplicación con
flutter run
- Modelos: Solo contienen datos y validaciones básicas
- Repositorios: Manejan el acceso a los datos, ocultando la fuente de datos subyacente
- ViewModels: Contienen la lógica de presentación y estado
- Vistas: Solo se encargan de mostrar datos y capturar interacciones
- Testabilidad: Cada componente puede ser probado de forma aislada
- Mantenibilidad: Cambios en la UI no afectan la lógica de negocio
- Escalabilidad: Fácil de extender con nuevas funcionalidades
Este proyecto es un excelente ejemplo para aprender:
- Separación clara de responsabilidades
- Inyección de dependencias con GetIt
- Gestión de estado con Provider
- Arquitectura limpia y mantenible
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.