Saltar al contenido principal

Capa de core

lib/core/ es la capa de infraestructura compartida de la aplicación: feature-agnostic, estable y reutilizable. Todos los módulos de lib/src/ dependen de ella, pero nunca al revés.

El principio rector del core es la estabilidad: el código que vive aquí es usado por todos los features. Un cambio en el core puede afectar toda la aplicación, por lo que sus abstracciones deben ser cuidadosamente diseñadas.

Barrel files

El core expone dos puntos de entrada según la capa que los consuma:

ArchivoPropósito
foundation.dartRe-exporta librerías de Dart (dart:async, dart:io, etc.) y paquetes base (bloc, equatable, rxdart). Punto de entrada para la capa de dominio e infraestructura.
ui.dartRe-exporta todo lo de foundation.dart más componentes de UI: Material, go_router, flutter_animate, flutter_bloc, tema y widgets del core. Punto de entrada para la capa de presentación.
// En la capa de dominio o datos
import 'package:app/core/foundation.dart';

// En la capa de presentación (BLoCs de UI, widgets)
import 'package:app/core/ui.dart';
aviso

Nunca importes ui.dart desde la capa de dominio. Las dependencias de Flutter no deben contaminar el dominio puro.

Componentes

ComponenteResponsabilidad
AdaptersAbstracciones sobre plugins y dependencias externas. Desacoplan el resto de la app de los paquetes concretos.
BLoCs compartidosBLoCs de estado global inyectados en el árbol raíz y consumidos desde cualquier feature.
EnumsEnumeraciones compartidas por toda la app (estados async, permisos, tipos HTTP).
ExtensionesMétodos de extensión sobre tipos de Dart y Flutter (BuildContext, String, num, etc.).
InterfacesContratos abstractos para las capas de la arquitectura (UseCase, BaseEnum).
KeysConstantes centralizadas para claves de entorno y almacenamiento local.
TypesImplementaciones concretas de los estados async (FetchAsyncState, SendAsyncState, ReloadAsyncState).
TypedefsAliases de tipo (DataMap, etc.) para mejorar legibilidad.
UtilsCliente HTTP, interceptors, formatters y utilidades stateless.
ValidadoresValidadores de campos de formulario basados en FormField<T, Result<void, E>>.
WidgetsBuilding blocks de UI reutilizables organizados por categoría.

Estructura de carpetas

lib/
└── core/
├── adapters/
├── blocs/
├── enums/
├── extensions/
├── interfaces/
├── keys/
├── permissions/
├── theme/
├── typedefs/
├── types/
├── utils/
├── validators/
├── variables/
├── widgets/
├── foundation.dart # Barrel file — dominio e infraestructura
└── ui.dart # Barrel file — presentación