jocaaguraarchetype 4.0.0
jocaaguraarchetype: ^4.0.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.
4.0.0 - 2025-12-14 #
⚠️ Breaking Changes #
- Public APIs now depend on
AbstractAppManagerinstead of the concreteAppManager. This affects (at least):JocaaguraAppShellControllerJocaaguraThemedRouterAppJocaaguraAppShell
✅ Why #
- Lower coupling: UI wiring no longer depends on the concrete archetype implementation.
- Better testability: enables minimal fakes/stubs for unit tests without heavy app wiring or real stream extensions.
- Safer evolution: internal changes in
AppManagerare less likely to ripple into consumers.
🔁 Migration #
- Replace explicit
AppManagertypes withAbstractAppManagerwhere required. - You can still keep a concrete instance, typed as the abstraction:
Rationale #
This reduces coupling in the UI layer and makes unit tests simpler and more deterministic by allowing precise fakes without requiring full app wiring.
3.5.3 - 2025-12-14 #
Added #
- ModelFieldState: modelo inmutable para formularios controlados con
BlocGeneral<ModelFieldState>, concopyWith, banderasisDirty/isValidy roundtrip JSON para persistir borradores. - Forms Example:
example/lib/forms_example.dartahora incluye el flujo multi‑paso (Email → Password → Login OK) que replica el patrón de OKANE y prueba navegación con FieldState. - Docs: guía
doc/forms-flow.mddetallando el ciclo FieldState ↔ BLoC ↔ UI, mejores prácticas y casos (login, búsqueda con sugerencias).
Changed #
- Example navigation: el demo de formularios se divide en dos pantallas (email y password) y solo avanza si cada FieldState es válido; se reutiliza
DemoLoginFormBlocentre pasos y se añade una pantalla de confirmación.
3.5.2 - 2025-12-13 #
Changed #
- Responsive Flow: el llamado a
BlocResponsive.setSizeFromContextahora sucede únicamente en elbuilderdeMaterialApp.routerdentro deJocaaguraApp, eliminando las invocaciones redundantes en widgets y mejorando la consistencia de métricas. - UI Widgets:
PageBuilder,WorkAreaWidget,PageWithSecondaryMenuWidget, menús y componentes reutilizables ahora sólo consumen métricas deBlocResponsive; se actualizaron tests para reflejar el flujo centralizado. - MySnackBarWidget: se corrige el cálculo de
maxWidthpara evitar constraints negativas en pantallas pequeñas (side‑effect del refactor responsivo).
Docs #
doc/responsive-flow.md: nueva guía oficial que documenta el patrón centralizado de responsividad, buenas prácticas, migración y estrategias de prueba consetSizeForTesting.- Page Builder / README: se enlaza la guía y se documenta que
PageBuilderya no llamasetSizeFromContext, orientando a los implementadores sobre el nuevo flujo.
3.5.1 - 2025-12-08 #
Chore #
- Dependencies: actualiza
jocaagura_domaina 1.33.0.
Added #
- App Version – Gestión reactiva:
- Integración de
BlocModelVersionpara centralizar el estado de versión de la app.
- Integración de
- HTTP – Obtención de versión remota:
- Manejo de solicitudes HTTP para consultar la versión de la app desde backend (flujo GET con normalización de respuesta y manejo de errores).
Changed #
- App Version – Lógica de comparación:
- Refactor de la comparación de versiones (semver/build number) para decidir update available / force update usando
ModelAppVersion.
- Refactor de la comparación de versiones (semver/build number) para decidir update available / force update usando
- HTTP – Robustez & encapsulamiento:
- Mejoras en el pipeline HTTP para la consulta de versión (normalización de payload, preparación para timeouts/offline, reutilización de helpers).
Docs #
- Guías y comentarios ampliados para:
- Flujo de obtención de versión via HTTP.
- Contratos y uso de
ModelAppVersion(semántica de campos, comparación, ejemplos).
Notes #
- Cambios no rompientes. Asegúrate de configurar el endpoint de versión y, si corresponde, mapear correctamente los campos de
ModelAppVersion(e.g.,version,buildNumber,forceUpdate).
3.5.0 - 2025-11-16 #
Added #
- Session –
SessionPages(modelo único)- Nueva clase que agrega las 7 páginas requeridas por
JocaaguraAppWithSession:splash,homePublic,login,homeAuthenticated,sessionClosed,authenticating,sessionError.
- Nueva clase que agrega las 7 páginas requeridas por
- UI – Arquitectura extensible de Page Builder (
ui/builders/)- Punto de entrada:
PageBuilder. - Componentes:
PageLoadingBoundary,PageScaffoldShell,MainDrawer,PageAppBar. - Contratos (overrides):
PageLoadingBoundaryBuilder,PageScaffoldShellBuilder,MainDrawerBuilder,PageAppBarBuilder. - Extensiones UI:
ModelMainMenuModelX(víaExpando). - Documento:
page-builder-doc.md(guía completa y patrones de personalización).
- Punto de entrada:
- UI – Secondary Menu Builder (responsive)
PageWithSecondaryMenuBuildercon wiring automático aAppManager.secondaryMenu.itemsStream.- Layouts:
SecondaryMenuMobileLayout(fila flotante de acciones cuadradas; tooltips; animaciones).SecondaryMenuSidePanelLayout(panel lateral para pantallas grandes; overflow-safe).
- Overrides:
menuItemsOverride,mobileBuilder,sidePanelBuilder. - Documento:
secondary-menu-builder-doc.md.
Changed #
JocaaguraAppWithSession- El constructor ahora recibe un único parámetro
sessionPages: SessionPages(en lugar de 7PageModels). Lafactory dev()fue actualizada.
- El constructor ahora recibe un único parámetro
- Alineación con Material 3 (colores y layouts)
- Fondos por defecto en
WorkAreaWidget,PageWithSecondaryMenuWidgetyPageWithSecondaryMenuBuilder:scheme.surfaceContainerLowest(antesscheme.surface). DrawerOptionWidget: roles de color M3 para estados habilitado/inhabilitado/seleccionado/hover.SecondaryMenuSidePanelLayout: cálculo de ancho basado enresponsive.size.widthpara evitar overflow en pantallas pequeñas.PageAppBar: separador después del botón Back para padding consistente;iconSizedel botón Back ahora responsivo (proporcional al margen).
- Fondos por defecto en
Docs #
jocaagura-app-with-session.mdactualizado para el nuevo API conSessionPages.- Guías nuevas/extendidas:
page-builder-doc.md,secondary-menu-builder-doc.md.
Backwards compatibility #
PageBuildermantiene el mismo API público y comportamiento por defecto; la nueva arquitectura es opt-in mediante builders.- El cambio de colores a M3 puede ajustar ligeramente el contraste percibido en algunos temas.
BREAKING CHANGES #
- Constructor de
JocaaguraAppWithSession:- Ahora requiere
sessionPages: SessionPages. - Migración rápida:
// Antes final Widget app = JocaaguraAppWithSession( splash: splashPage, homePublic: homePublic, login: loginPage, homeAuthenticated: homeAuth, sessionClosed: sessionClosed, authenticating: authenticating, sessionError: sessionError, ); // Ahora final Widget app = JocaaguraAppWithSession( sessionPages: SessionPages( splash: splashPage, homePublic: homePublic, login: loginPage, homeAuthenticated: homeAuth, sessionClosed: sessionClosed, authenticating: authenticating, sessionError: sessionError, ), );
- Ahora requiere
Notes #
- La nueva arquitectura de Page/Secondary Menu Builders mejora modularidad, pruebas y personalización sin obligar a copiar código del arquetipo.
- Los ajustes M3 corrigen desbordes y alineaciones sutiles en pantallas pequeñas y grandes.
3.4.1 - 2025-11-04 #
Fixed #
- Lints / Docs:
- Corrige advertencia “Angle brackets will be interpreted as HTML” en DartDoc (
theme_usecases.dart) escapando o envolviendo con código para tipos genéricos (Either<ErrorItem, ThemeState>).
- Corrige advertencia “Angle brackets will be interpreted as HTML” en DartDoc (
- UI (deprecations):
- Reemplazo de
toastStreamdeprecated enpage_builder.dart:- Ahora se usa
textStream(solo texto) ostream<ToastMessage>según el caso, eliminando la dependencia de la API obsoleta.
- Ahora se usa
- Reemplazo de
Changed #
- env (DI/testability) —
hotfix(env): refactor Env for improved DI and testabilityEnvpasa de diseño estático a modelo basado en instancias:- Convertido a
abstract class;isQa,isProd,modeahora son getters de instancia. - La variable de compilación
_modecontinúa siendostatic, pero se encapsula detrás de la instancia.
- Convertido a
DefaultEnv: implementación estándar por defecto.- Testing: se añade
modeTestopcional para forzar modo en pruebas.
- AppManager
- Ahora recibe un
Enven el constructor (por defecto,DefaultEnv). appMode,isQa,isProddelegan alEnvinyectado (no más accesores estáticos).
- Ahora recibe un
Docs #
- Actualizada la documentación de
Envy ejemplo práctico de uso con DI. - Notas en
page_builder.dartsobre el uso detextStream/ToastMessageen lugar detoastStream.
Migration notes #
- Casi sin rompimientos:
- Si no pasas
Env, no debes cambiar nada (usaDefaultEnv). - Para pruebas o entornos custom, inyecta tu instancia:
final Env env = DefaultEnv(modeTest: AppMode.qa); // o tu implementación final AppManager am = AppManager(env: env); - Si tu UI usaba
toastStreamdirectamente, migra a:textStream(cuando solo necesitas texto), o- un
Stream<ToastMessage>si manejas tipos enriquecidos.
- Si no pasas
3.4.0 - 2025-11-03 #
Versión acumulada que integra las entregas 3.3.2 (flavors lógicos por
--dart-define) y 3.3.1 (página y web de Política de Privacidad, y estructura legal unificada). No introduce cambios adicionales fuera de lo ya incluido.
Added #
- Flavors lógicos por
--dart-define:lib/env/app_mode.dart:enum AppMode { dev, qa, prod }+parseAppMode(String).lib/env/env.dart:Envbase (extensible) conmode,isQa,isProd.lib/env/app_config_builder.dart:AppConfigBuilder.byMode(...)para despacharAppConfigpor entorno.lib/env/deferred_steps.dart:deferredStep(...)para cargas diferidas en Onboarding (timeouts, manejo de error y retry conLeft/Right).- Exports en
lib/jocaaguraarchetype.dart. - Doc:
doc/env-doc.mdcon:- Ejemplo Flutter de un solo archivo (contador +
AnyServicesimulado). - Guía de ejecución por modo
--dart-define=APP_MODE=dev|qa|prod. - Estrategia Android sugerida para ID/label por modo sin
productFlavors.
- Ejemplo Flutter de un solo archivo (contador +
Changed #
- Env/Onboarding: centralización de lectura de modo y mejoras para integrar Onboarding con imports diferidos.
- Legal: refactor a estructura unificada para centralizar contenidos y componentes.
Removed #
TermsAndConditionsProdPage(reemplazada por la estructura legal unificada).
Migration notes #
- No hay breaking changes.
- En apps que usan el arquetipo:
- Extiende
Envpara tus variables (class MyEnv extends Env { ... }). - Construye
AppConfigconAppConfigBuilder.byMode(mode: Env.mode, ...). - Mueve inicializaciones pesadas al Onboarding con
deferredStep(...). - Ejecuta por modo:
flutter run --dart-define=APP_MODE=dev|qa|prod
- Extiende
3.3.2 - 2025-11-03 #
Added #
- Flavors (logical-only) por
--dart-define:lib/env/app_mode.dart:enum AppMode { dev, qa, prod }yparseAppMode(String).lib/env/env.dart:Envbase mínima (extensible por proyecto) conmode,isQa,isProd.lib/env/app_config_builder.dart:AppConfigBuilder.byMode(...)para despacharAppConfigpor entorno.lib/env/deferred_steps.dart: helperdeferredStep(...)para cargas diferidas durante Onboarding (timeouts, manejo de error y retry víaLeft/Right).
- Exports en
lib/jocaaguraarchetype.dartpara exponer las nuevas utilidades. - Documentación:
doc/env-doc.mdcon:- Ejemplo Flutter de un solo archivo (contador +
AnyServicesimulado). - Guía de ejecución por modo
--dart-define=APP_MODE=dev|qa|prod. - Sugerencia de estrategia Android para ID/label por modo sin productFlavors.
- Ejemplo Flutter de un solo archivo (contador +
Changed #
- Estructura interna del paquete para centralizar lectura de modo y facilitar integración de Onboarding con imports diferidos.
Notes (migración rápida) #
- No hay breaking changes.
- En proyectos que usen el arquetipo:
- Extiende
Enven la app para tus propias variables (class MyEnv extends Env { ... }). - Construye
AppConfigconAppConfigBuilder.byMode(mode: Env.mode, ...). - Mueve inicializaciones pesadas al Onboarding usando
deferredStep(...). - Ejecuta por modo:
flutter run --dart-define=APP_MODE=dev|qa|prod
- Extiende
3.3.1 - 2025-11-03 #
Added #
- Privacy Policy (in-app):
PrivacyPolicyPage.dartpara visualizar la política dentro de la app. - Web:
web/privacy.htmlcomo versión estática pública (mejora de cumplimiento, SEO y descubribilidad). - UI reutilizable (legal):
SectionWidget,SubSectionWidget,PolicyTableWidget,InfoGridWidgetpara maquetación clara y consistente. - Routing & Navegación: registro de
PrivacyPolicyPageenlegal_pages.darty entrada “Política de Privacidad” en el menú de usuario (TermsMenuTileWidget).
Changed #
- Estructura legal unificada: refactor de la sección legal para centralizar contenidos y componentes.
Removed #
TermsAndConditionsProdPage: eliminada por redundante frente a la nueva estructura legal unificada.
Notes #
- Cambios no rompientes. Si tu app enlazaba a
TermsAndConditionsProdPage, actualiza rutas/menús para apuntar aPrivacyPolicyPageo aweb/privacy.htmlsegún corresponda.
3.3.0 - 2025-10-15 #
Added #
- Typography –
TextThemeOverrides:- Clase serializable para definir/persistir overrides tipográficos (light/dark).
- Serializa un subconjunto curado de
TextStyle:fontFamily,fontSize,fontWeight,letterSpacing,height. - Igualdad/
hashCoderobustos eimmutabilityvíacopyWith. - Exportada desde
jocaaguraarchetype.dart.
- ThemeState:
- Nuevo campo
textOverridespara personalizarTextThemede forma independiente a colores (light/dark). - Soporte completo en
fromJson,toJson,copyWith,==,hashCode.
- Nuevo campo
- Arquitectura reactiva de tema:
- Contratos:
ServiceThemeReact(stream de JSON canónico),GatewayThemeReact(normaliza/valida),RepositoryThemeReact(mapea aStream<Either<ErrorItem, ThemeState>>), y use caseWatchTheme. - Implementaciones:
FakeServiceThemeReact(auto-toggle configurable),GatewayThemeReactImpl,RepositoryThemeReactImpl. - BLoC:
BlocThemeReactsuscrito aWatchThemepara actualizaciones automáticas. - Demo:
main_reactive_demo.dartmostrando service → gateway → repository → bloc → UI.
- Contratos:
- Docs & utilidades:
- Documentación y pruebas para
BuildThemeData(derivación deColorScheme, overrides,TextTheme, text scaling).
- Documentación y pruebas para
Changed #
- BlocTheme / BlocThemeReact:
BlocThemeReactahora hereda deBlocTheme(el API imperativo se mantiene; el estado se alimenta desde el stream del repositorio).app_config.dart: configuración por defecto actualizada aBlocThemeReactconRepositoryThemeReactImply servicio fake.jocaagura_app.dart:StreamBuildersimplificado usandoam.theme.stateOrDefault.
- Separación de responsabilidades:
TextThemeOverridesexcluye colores (responsabilidad deThemeOverrides/ColorScheme).
Docs #
- ThemeState: secciones nuevas (“Behavior”, “Contracts”, “Caveats”, “Functional example”), aclaraciones sobre formato HEX
#AARRGGBB, compatibilidad ARGB int y exclusión decreatedAten igualdad. - ThemeOverrides / TextThemeOverrides: DartDoc ampliado (serialización,
copyWithcon clear flags, clamping defontWeight, ejemplos más completos). - Capa reactiva: DartDocs detallados en todos los componentes; guía
docs/theme-doc.mdcon arquitectura, cableado, uso y estrategia de pruebas.
Tests #
- TextThemeOverrides: round-trip JSON, igualdad, casos borde e integración con
ThemeOverrides. - ThemeState: casos para
textOverrides(light+dark, solo light, nulo); convivencia conThemeOverrides. - Capa reactiva:
reactive_theme_watch_test.dartvalidawatch()extremo a extremo (auto-toggle, normalización, manejo de errores,TextThemeOverrides).
Dependencies #
jocaagura_domain→^1.31.0para soportar la arquitectura reactiva de temas.
Migration notes #
- Si persistes tema en JSON:
- Añade/acepta el nuevo nodo
textOverrides(opcional; backward compatible). - Mantén colores en
ThemeOverridesy tipografías enTextThemeOverrides(sin mezclar responsabilidades).
- Añade/acepta el nuevo nodo
- Para adoptar el flujo reactivo:
- Usa
BlocThemeReact+WatchThemey un repositorio reactivo (RepositoryThemeReactImpl). - En UI, lee el estado con
am.theme.stateOrDefaulto suscríbete al BLoC.
- Usa
Notas: Cambio no rompiente. La arquitectura reactiva y
TextThemeOverridesson opt-in y conviven con la configuración imperativa existente.
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.
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.