Reglamento v2
El Reglamento v2 establece las convenciones, patrones y herramientas que el equipo móvil de Avila Tek usa para escribir código Flutter consistente, mantenible y escalable.
Principios
- Privacidad por defecto — Solo expone lo estrictamente necesario. Cada feature es una librería privada gracias al sistema
part/part ofde Dart. - Errores explícitos — Ninguna capa lanza excepciones como mecanismo de control de flujo. Toda operación retorna
Result<T, E>(éxito o fallo) para forzar el manejo en el sitio de llamada. - Estado sin enums — El estado asíncrono se representa con
FetchAsyncState<T, E>,SendAsyncState<T, E>yReloadAsyncState<T, E>en lugar de enumsinitial/loading/success/failure. - Generación con bricks — La estructura base de cada feature se genera con el brick de Mason
feature_brick_plus, evitando código de boilerplate escrito a mano.
Arquitectura
El proyecto sigue una arquitectura en capas inspirada en Clean Architecture, con dependencias unidireccionales:
┌──────────────────────────────────────────────────┐
│ Capa de Presentación │
│ (widgets, BLoCs, features, navegación) │
└───────────────────────┬──────────────────────────┘
│ depende de
┌───────────────────────▼──────────────────────────┐
│ Capa de Dominio │
│ (entidades, repositorios, casos de uso) │
└───────────┬───────────────────────────┬──────────┘
│ implementa │ consume
┌───────────▼──────────┐ ┌───────────▼──────────┐
│ Capa de Datos │ │ Core │
│ (models, APIs, │ │ (foundation, │
│ repositories) │ │ tipos, widgets) │
└──────────────────────┘ └──────────────────────┘
La capa de Core es consumida por todas las demás capas. El Dominio no conoce ni a
Datani aPresentación— solo define contratos. La Presentación depende del Dominio a través de repositorios e interfaces.
Capas
| Capa | Responsabilidad |
|---|---|
| Core | Infraestructura compartida: adapters, tipos async, extensiones, widgets base, barrel files foundation.dart y ui.dart. |
| Dominio | Lógica de negocio pura: entidades, enums, parámetros, interfaces de repositorios y casos de uso. Solo Dart puro — sin Flutter ni SDKs externos. |
| Datos | Comunicación con fuentes externas: modelos DTO, Data Sources, repositorios concretos. Todo retorna Result<T, E>. |
| Presentación | UI y estado: features generados con feature_brick_plus, BLoCs privados, navegación con go_router. |
Herramientas clave
| Herramienta | Uso |
|---|---|
feature_brick_plus | Genera la estructura de un feature (default, stepper o tabbed) con todos los archivos y declaraciones part necesarios. |
afp | Provee Result<T, E>, FetchAsyncState, SendAsyncState, ReloadAsyncState, RemoteDataBloc, SendDataBloc y PagedRemoteDataBloc. |
go_router | Sistema de navegación declarativa. Los features exponen routeName y path como constantes estáticas en la clase Page. |
flutter_bloc | Gestión de estado. Toda lógica de UI vive en un Bloc privado (_FeatureBloc) accesible solo dentro del feature. |