jocaaguraarchetype 3.2.0
jocaaguraarchetype: ^3.2.0 copied to clipboard
Starter archetype for Flutter apps with Jocaagura Clean Architecture, cross-cutting BLoCs, theming, and navigation setup.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
3.2.0 - 2025-09-10 #
Added #
- JocaaguraApp: widget de alto nivel con
AppManagerProvidery factoryJocaaguraApp.dev()para arranque rápido. - UtilsForTheme: utilidades para parseo/formateo de colores y acceso JSON estricto.
- Testing:
FakeServiceThemepara pruebas determinísticas de implementaciones de tema.
Changed #
- PageRegistry / PageManager: utilidades de rutas, políticas post-dispose, navegación nombrada y mayor estabilidad en hot reload.
- Navegación:
MyAppRouterDelegatemejora la conciliación de removals y refuerza la inmutabilidad en los modelos de navegación. - Tema:
GatewayThemeImpl.normalize()acepta semilla comoint(ARGB32),String(HEX#AARRGGBB) oColor(persistencia interna comoint).- JSON canónico en
ThemeStateyThemeOverrides: colores en HEX mayúsculas#AARRGGBB;fromJsonadmite ARGBintlegado pero normaliza entoJson. createdAt(DateTime?) serializado en ISO8601 UTC cuando existe y excluido de==/hashCode.
Docs #
- DartDoc ampliado en ServiceTheme, PageRegistry y PageManager, con ejemplos autocontenidos.
Tests #
- Casos adicionales para
GatewayThemeImpl,ThemeUsecasesyRepositoryThemeImpl(incluye verificación de normalización HEX y propagación de errores).
CI/CD #
- Workflows actualizados para commits firmados, análisis estático y publicación en pub.dev.
Notas: No hay cambios incompatibles. Si usas snapshots de JSON de tema en tests, podrían requerir actualización al formato HEX en mayúsculas.
3.1.4 - 2025-09-10 #
Added #
- Testing:
FakeServiceThemepara pruebas determinísticas deServiceTheme(usado enservice_theme_test.dart).
Changed #
- GatewayThemeImpl:
normalize()ahora acepta semilla comoint(ARGB32),String(HEX#AARRGGBB) oColor. Se persiste internamente comoint. - Serialización de tema:
ThemeState/ThemeOverridesemiten JSON canónico:- Colores en HEX
#AARRGGBB(mayúsculas). fromJsonacepta ints ARGB legados, perotoJsonnormaliza a HEX.createdAtesDateTime?y se serializa en ISO8601 UTC si existe; se ignora en==/hashCode.
- Colores en HEX
- Estructura:
ThemeOverridesyThemePatchmovidos a archivos propios (theme_overrides.dart,theme_patch.dart). - Utilidades:
UtilsForThemepara parseo/formateo de color y acceso JSON estricto.
Fixed #
- ThemePatch.applyOn: maneja
textScaleno finito y cae de forma segura al valor base.
Docs #
- ServiceTheme: DartDoc ampliado (contratos de pureza, idempotencia, pre/post-condiciones).
Tests #
- GatewayThemeImpl: casos para entradas en HEX y
Color. - ThemeUsecases: pruebas de propagación de errores (read/write), verificación de HEX canónico en
ThemeState.toJson()y fallback a defaults enERR_NOT_FOUND. - RepositoryThemeImpl: corrección de nombre de archivo de pruebas
repository_teme_impl_test.dart→repository_theme_impl_test.dart.
CI #
- Workflow:
validate_commits_and_lints.yamlignora pushes amasterydevelop(ramas protegidas con merge controlado).
Notas: No hay cambios incompatibles. La salida JSON ahora es canónica; si tienes snapshots de tests sobre JSON de tema, puede que requieran actualizarse al formato HEX en mayúsculas.
3.1.3 - 2025-09-10 #
Added #
- JocaaguraApp (nuevo widget de alto nivel)
- API pública stateless con shell interno stateful para estabilidad del router.
JocaaguraApp.dev()para bootstrapping rápido (propiedad delAppManagerpor defecto).AppManagerProvideren la raíz y wiring deMaterialApp.router.- Ejemplo mínimo de navegación (3 páginas) y documentación integrada.
- PageRegistry
- Documentación exhaustiva y utilidades de 404/redirect.
toPage()con claves canónicas estables y soporte deDialogPage.
- PageManager
- ModulePostDisposePolicy para controlar el comportamiento post-dispose:
throwStateError(estricto).returnLastSnapshotNoop(tolerante).
- Nuevos helpers y métodos de navegación nombrada (
pushDistinctTopNamed,pushOnceNamed, etc.).
- ModulePostDisposePolicy para controlar el comportamiento post-dispose:
- CI
- Workflow
validate_commits_and_lints.yaml(commits firmados, lints, format, doctor).
- Workflow
- Example
- Consolidación en
example/lib/main.darty simplificación del arquetipo de demo.
- Consolidación en
Changed #
- MyAppRouterDelegate
- Lógica de
popy conciliación de removals refinada para distinguir cambios del modelo vs. gestos delNavigator. update()para hot reload / cambios dinámicos dePageManager/PageRegistrysin recrear el delegate.- Sincronización inicial protegida con
_navigatorSyncedOncepara evitar reacciones prematuras.
- Lógica de
- JocaaguraApp / Lifecycle
- El ownership del
AppManagerse respeta medianteownsManager. - Importante: el
dispose()delAppManagerse difiere al cierre real de la app (p. ej.AppLifecycleState.detached) para evitar matar BLoCs en desmontajes no definitivos (hot reload, reparents, tests).
- El ownership del
- PageModel / NavStackModel
- Inmutabilidad reforzada (listas/mapas envueltos como unmodifiable).
- Hash/igualdad más estables y documentación modernizada.
Fixed #
- Cadena de rutas: se preserva correctamente
PageModel.nameen múltiples iteraciones (v1/v2/v3). setNewRoutePath: limpieza correcta de historial al establecer una nueva ruta.- Eliminados pops fantasma durante el primer build del
Navigatorgracias a la sincronización diferida.
Docs & Tests #
- DartDoc ampliado para
MyAppRouterDelegate,PageRegistryyPageManager, con ejemplos autocontenidos. - Cobertura de pruebas ampliada (post-dispose policy, títulos, historial, conciliación de removals, hooks de delegate).
Deprecations #
- projectorMode: el modo “proyector/top-only” queda desaconsejado y no se expone desde
JocaaguraApp(el delegate trabaja con stack completo). Para flujos de “pantalla única”, usar navegación porreplaceTop*.
Notas de migración
- Si dependías de “proyector”, migra a stack completo y usa
replaceTop*para transiciones tipo shell. - En tests que reconstruyen el árbol varias veces, si administras el
AppManagerexternamente, dispónlo explícitamente entearDown().
Autores
- @Albert J. Jiménez P. (commits y refactors principales).
3.1.2 - 2025-09-08 #
Refactor #
- SessionNavCoordinator: improved robustness and testability.
- Added
_prevTopFromStackEventtracking to better handle user navigation intents. - Introduced
canApplyGoHomepredicate to centralize the conditions for (C) → authed on login → go home. - Strengthened idempotency checks for login/home redirections.
- More resilient fallbacks when
BlocSessionorPageManagerare already disposed.
- Added
Tests #
- Expanded coverage for session-aware navigation flows (unauth → login, auth → restore, refreshing, logout, etc.).
- Verified compatibility with alternative
pageEqualsstrategies (by name, by route). - Documented and temporarily disabled two failing tests related to intention handling (
prevTop/canApplyGoHome).
These are not in use yet and will be fully debugged in a future iteration.
→ See TODOs in test file and upcoming issue “Depurar manejo de intenciones en SessionNavCoordinator”.
Notes #
- Session management is confirmed to work as expected across supported flows.
- The intention management code path is scaffolded but not yet active in production use.
3.1.1 - 2025-09-07 #
Refactor #
- Consolidated all example files into a single
example/lib/main.dartfor a minimal, self-contained demo. - Simplified
RepositoryThemeImplandGatewayThemeImplto useconst DefaultErrorMapper().
CI #
- Added GitHub Actions workflow
validate_commits_and_lints.yaml:- Verifies signed commits.
- Sets up Flutter and runs
flutter doctor. - Runs
flutter pub getfor all pubspecs. - Disallows
dependency_overridesin pubspec.yaml. - Enforces formatting with
dart format. - Runs static analysis with
dart analyze --fatal-infos --fatal-warnings.
Chore #
- Bumped
jocaagura_domaindependency to^1.26.0. - Updated package description in
pubspec.yamlto comply with pub.dev scoring guidelines.
✅ This patch release simplifies the example app structure, strengthens CI with commit and lint validations, and ensures alignment with the latest jocaagura_domain release.
3.1.0 - 2025-09-03 #
Added #
-
AppConfig
- Nuevo método
T requireFirstModule<T>()que expone el primerBlocModuleencontrado enblocModuleList. - Nuevo método
T requireModuleByKey<T>(String key)que devuelve elBlocModulecorrespondiente a lakeyestablecida, validando tipo. - Ambos métodos lanzan error si no encuentran el módulo, asegurando integridad en fase de desarrollo.
- Nuevo método
-
AppManager
- Exposición de los métodos
requireFirstModule<T>()yrequireModuleByKey<T>(String key)para centralizar el acceso a módulos desde el manager.
- Exposición de los métodos
-
Tests
- Se añadieron pruebas unitarias para validar el comportamiento de los nuevos métodos tanto en
AppConfigcomo enAppManager.
- Se añadieron pruebas unitarias para validar el comportamiento de los nuevos métodos tanto en
-
AppManager
- Nuevos métodos de navegación basados en
PageModel:goToModel(PageModel model)pushModel(PageModel model, {bool allowDuplicate = true})pushOnceModel(PageModel model)replaceTopModel(PageModel model, {bool allowNoop = false})
- Estos métodos complementan la navegación existente por
String, permitiendo aprovechar directamente losPageModeldefinidos por cada página.
- Nuevos métodos de navegación basados en
Changed #
- Ajuste de la suite de pruebas para incluir validaciones de errores al no encontrar módulos en
blocModuleList. - Suite de pruebas ampliada para validar la nueva API de navegación en
AppManager. - Documentación (
DartDoc) actualizada con ejemplos de uso de los nuevos métodos.
3.0.0 - 2025-08-28 #
⚠️ Breaking Changes #
- Se eliminó la dependencia de
jocaagura_domainy se ha vuelto a implementar la lógica de negocio dentro del paquete. - Se ha eliminado el
BlocSessionyBlocConnectivity, ya que ahora se manejan directamente desdeAppManager. - Se ha eliminado el
ServiceSessionyServiceConnectivity, ya que ahora se manejan directamente desdeAppManager. - Se ha eliminado el
ServiceSessionPlus, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
ServiceConnectivityPlus, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
FakeSessionProvider, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
FakeConnectivityProvider, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
FakeProvider, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
BlocUserNotifications, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
BlocCounter, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
BlocCounterPlus, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
BlocCounterProvider, ya que ahora se maneja directamente desdeAppManager. - Se ha eliminado el
BlocCounterPlusProvider, ya que ahora se maneja directamente desdeAppManager. - Ahora la libreria se puede utilizar como jocaaguraarchetype.
- Se expone la sublibreria
jocaaguraarchetiped_domainpara facilitar la integración con jocaagura_domain. - Ahora los archivos cumplen con el formato part of
jocaaguraarchetypepara una mejor organización y claridad.
Added
- README (Quick start): ejemplo mínimo con
JocaaguraApp.dev,PageRegistryyOnboardingPage. - DartDoc con ejemplos para 13 módulos clave (Theme Gateway/Repo/Service, páginas base, utils de color, blueprint widgets, etc.).
- Plantilla de issues inicial (
plantilla de issues.txt) para estandarizar reportes y tareas. - Guía inicial de tema (docs): “Configuración de Tema con JocaaguraArchetype” (cómo seed, M3, textScale, presets).
Changed
- Alcance aclarado: el arquetipo se centra en UI Shell y navegación; lo transversal vive en
jocaagura_domain(aviso en README). - Ejemplos y descripciones de componentes responsive y
PageBuilder(intención y uso típico).
Deprecated
- N/A (si en este ciclo anotamos alias/contratos antiguos del menú como
@Deprecated, documentar aquí y planificar remoción para1.28.0).
CI/CD
- Documentadas las rutas de workflows recomendados para PRs a
developymaster(validate PR). - Rama
master: consolidado el flujo de automatización/documentación de publicación. - Commits firmados: guía para configurar firma del bot/miembros del repo.
- CodeQL: lineamientos para ejecución en
developymaster.
2.0.1 - 2025-07-27 #
🔒 Congelación de pubspec.yaml #
Esta versión congela el archivo pubspec.yaml como parte del proceso de migración de lógica de negocio hacia el paquete jocaagura_domain, a partir de su versión 1.21.2.
⚠️ Importante:
No se recibirán actualizaciones ni nuevas dependencias en este paquete hasta que la migración completa esté finalizada. Esto garantiza estabilidad durante el refactor estructural y evita conflictos en entornos de integración continua.
2.0.0 - 2025-07-27 #
⚠️ Breaking Changes #
- Se removió la implementación interna de
ServiceSessionyServiceConnectivity. - Se introdujo
service_session_plus.dart, que ahora debe ser implementado desde la app o inyectado desdejocaagura_domain. bloc_session.dartybloc_connectivity.dartfueron actualizados para depender de las nuevas abstracciones definidas enjocaagura_domain.- El paquete deja de funcionar de forma independiente. Ahora requiere tener configurado
jocaagura_domainpara su correcto funcionamiento.
💡 Razonamiento del cambio #
Este cambio mayor responde a una estrategia de consolidación de herramientas transversales dentro del paquete jocaagura_domain. Centralizar los servicios compartidos y sus contratos:
- Simplifica el mantenimiento y evolución de la arquitectura.
- Evita colisiones con paquetes externos o implementaciones personalizadas.
- Permite que cada app tenga control sobre la forma en que maneja sesiones, conectividad y navegación.
📌 Migración necesaria #
- Agrega
jocaagura_domaincomo dependencia en tupubspec.yaml. - Implementa tu propia versión de
ServiceSessionyServiceConnectivityacorde a tus necesidades. - Asegúrate de configurar correctamente los blocs desde
AppManager, inyectando las implementaciones deseadas.
📁 Otros cambios #
- Se reorganizó el código para reflejar mejor la separación entre
blocs,services,uiyutils. - Mejora de documentación interna para los nuevos servicios.
⚠️ Este paquete podría ser deprecado en el futuro. Se recomienda utilizar directamente
jocaagura_domaincomo punto de entrada para la configuración de servicios compartidos y lógica transversal.
1.5.2 - 2025-01-16 #
Improved #
- Enhanced the
publish.ymlworkflow to accommodate the Google environment and GitHub Actions, ensuring seamless package publishing.
[2.0.1] - 2025-08-27 #
🔒 Congelación de pubspec.yaml #
Esta versión congela el archivo pubspec.yaml como parte del proceso de migración de lógica de negocio hacia el paquete jocaagura_domain, a partir de su versión 1.21.2.
⚠️ Importante:
No se recibirán actualizaciones ni nuevas dependencias en este paquete hasta que la migración completa esté finalizada. Esto garantiza estabilidad durante el refactor estructural y evita conflictos en entornos de integración continua.
🧭 Contexto #
La lógica compartida, los contratos y modelos principales serán trasladados progresivamente a jocaagura_domain para favorecer la reutilización, testabilidad y mantenimiento centralizado.
📌 Próximos pasos #
- Migrar los
Blocs,Gateways,RepositoriesyEntitiesexistentes ajocaagura_domain. - Eliminar código duplicado tras la consolidación.
- Actualizar documentación de dependencias y estructura de carpetas.
Si estás utilizando este paquete en tus proyectos, asegúrate de apuntar tus dependencias compartidas directamente a jocaagura_domain en adelante.
[2.0.0] - 2025-07-27 #
⚠️ Breaking Changes #
- Se removió la implementación interna de
ServiceSessionyServiceConnectivity. - Se introdujo
service_session_plus.dart, que ahora debe ser implementado desde la app o inyectado desdejocaagura_domain. bloc_session.dartybloc_connectivity.dartfueron actualizados para depender de las nuevas abstracciones definidas enjocaagura_domain.- El paquete deja de funcionar de forma independiente. Ahora requiere tener configurado
jocaagura_domainpara su correcto funcionamiento.
💡 Razonamiento del cambio #
Este cambio mayor responde a una estrategia de consolidación de herramientas transversales dentro del paquete jocaagura_domain. Centralizar los servicios compartidos y sus contratos:
- Simplifica el mantenimiento y evolución de la arquitectura.
- Evita colisiones con paquetes externos o implementaciones personalizadas.
- Permite que cada app tenga control sobre la forma en que maneja sesiones, conectividad y navegación.
📌 Migración necesaria #
- Agrega
jocaagura_domaincomo dependencia en tupubspec.yaml. - Implementa tu propia versión de
ServiceSessionyServiceConnectivityacorde a tus necesidades. - Asegúrate de configurar correctamente los blocs desde
AppManager, inyectando las implementaciones deseadas.
📁 Otros cambios #
- Se reorganizó el código para reflejar mejor la separación entre
blocs,services,uiyutils. - Mejora de documentación interna para los nuevos servicios.
⚠️ Este paquete podría ser deprecado en el futuro. Se recomienda utilizar directamente
jocaagura_domaincomo punto de entrada para la configuración de servicios compartidos y lógica transversal.
[1.5.2] - 2025-01-16 #
Improved #
- Enhanced the
publish.ymlworkflow to accommodate the Google environment and GitHub Actions, ensuring seamless package publishing.
1.5.1 - 2024-01-16 #
Updated #
- Updated
codeql.ymlto version 3 due to the deprecation of version 2 announced by GitHub, ensuring proper execution of the scheduled code analysis cron jobs.
Added #
- Extracted the list of languages used by the CodeQL workflow into a GitHub secret (
secrets.CODEQL_LANGUAGES) for a more dynamic and efficient configuration.
1.5.0 - 2025-01-16 #
Added #
- CI/CD configuration for the
developbranch. - Integration of CodeQL for code quality analysis.
- Automation of commit signing using a bot.
- Fixed dates in the changelog.
1.4.5 - 2024-01-15 #
Added #
- Integrated
validate_prconfiguration to include themasterbranch, ensuring compliance with PR validation rules. - Added
publish.ymlto the.github/workflowsdirectory, enabling automatic publishing topub.devupon merging intomaster.
Updated #
- Extracted bot credentials (
nameandemail) into GitHub Secrets (secrets.BOT_NAMEandsecrets.BOT_EMAIL) to enhance security and prevent exposure.
1.4.4 - 2025-01-10 #
1.4.3 - 2025-01-08 #
1.4.1 - 2024-12-30 #
Updated #
- Changelog Translation: The changelog has been translated into English for publication on pub.dev.
- Pubspec.yaml: Adjusted to align with the latest version of the jocaagura_domain package, ensuring compatibility and consistency.
Added #
- Dartdoc Documentation: Comprehensive documentation has been added for all classes using the Dartdoc format, providing detailed explanations and examples for developers.
Improved #
- Test Coverage: Expanded the unit test coverage across the package to enhance reliability and ensure higher quality of the codebase.
1.4.0 - 2024-05-19 #
Added #
- Implemented a
DebouncerinBlocUserNotificationsto manage how and when the toast messages are displayed uniformly. - Added
ShowToastPagein the example to demonstrate the changes on-screen.
Changed #
- Updated
showToastto use theDebouncer, ensuring the message updates properly and stays visible for the defined duration. - Updated
IndexAppto allow access or visualization of theShowToastPage.
Fixed #
- Adjusted unit tests to reflect the new scope of
BlocUserNotificationswith the debouncer. - Corrected capitalization consistency in change sections to maintain uniformity in the document.
1.3.1 - 2024-05-13 #
Fixed #
- Fixed the conditional logic to display the button only when the value is greater than 1.
1.3.0 - 2024-05-01 #
Changed #
- Removed the export of
jocaagura_domainfrom the root of the package to clean up the import structure. - Removed internal invocation of the
jocaagura_archetypepackage to avoid circular references and improve modularity.
Fixed #
- Increased test coverage in
FakeProviderto ensure better validation and reliability of simulated functionalities.
1.2.1 - 2024-04-25 (fix) #
- Documentation updates to reflect changes and improvements in the modules.
- Fixed various minor issues detected by
dart fix.
1.2.0 - 2024-04-20 #
Added #
- Added
BlocConnectivitymodule withConnectivityProviderandInternetProviderto manage connectivity state.
1.1.0 - 2024-04-15 #
0.0.1 - 2024-04-10 #
- Initial Changelog with the current version of modules.