Adjunto/comparto mi solución a la prueba técnica asignada. He desarrollado el proyecto en Flutter, siguiendo buenas prácticas (Clean Architecture, BLoC, DI con get_it) y lo he documentado para facilitar instalación, ejecución y evaluación.
- Gestión de usuarios y direcciones con persistencia local (Hive).
- Navegación con
go_routery UI responsive (responsive_framework). - Estado por feature con
flutter_blocy casos de uso en dominio. - Modelos con
freezed+json_serializable+ Hive Adapters. - Internacionalización con
flutter_localizations/intl. - Tests unitarios, de widgets y golden tests.
- Flutter 3.24+ (Dart 3.9+). Verificar con:
flutter --versionflutter pub get
dart run build_runner build --delete-conflicting-outputsNotas:
- El codegen es necesario para
freezed,json_serializabley los adapters de Hive. - Los assets se gestionan desde
pubspec.yaml(p.ej.assets/worldcities.json).
- Windows (recomendado):
flutter run -d windows- Web (alternativa):
flutter run -d chromeEjecutar toda la suite (unit/widget/goldens):
flutter testActualizar imágenes golden cuando cambie el diseño:
flutter test --update-goldens
# o con variable de entorno
$env:UPDATE_GOLDENS="true"; flutter testflutter analyze
dart format .- Windows:
flutter build windows --release- Web:
flutter build web --release- Capas en
lib/:core/: router, temas, utilidades y constantes.domain/: entidades, repositorios abstractos y casos de uso (sin dependencias de Flutter).data/: modelos (Freezed/JSON/Hive), datasources locales (Hive) e implementación de repositorios.presentation/: UI (páginas y widgets) y estado por feature con BLoC/Cubit.
- DI con
get_itenlib/injection_container.dart. - Router con
go_router(vercore/router/) y navegación por nombres. - Persistencia con Hive; cajas para usuarios y direcciones; adapters registrados en la inicialización.
lib/
├─ core/
├─ data/
├─ domain/
├─ presentation/
├─ injection_container.dart
└─ main.dart
assets/
└─ worldcities.json
test/
├─ bloc/ data/ domain/ presentation/ router/
└─ goldens/
- BLoC por feature y casos de uso finos para mantener el dominio independiente.
- Modelado inmutable y serialización automática con Freezed/JSON.
- Hive para almacenamiento local sin complicaciones y rápido en escritorio/web compatible (cuando aplica).
responsive_frameworkpara breakpoints coherentes en pantallas grandes.- Golden tests para asegurar estabilidad visual de UI.
- Errores de codegen: ejecutar de nuevo
dart run build_runner build --delete-conflicting-outputs. - Golden tests distintos entre máquinas: usar
--update-goldensy validar fuentes/escala. - Problemas con Hive en escritorio: cerrar la app entre builds y limpiar
build/si persisten conflictos.