🌳 Flutter Root Project
Flutter Root Project es una extensión para VS Code que crea proyectos Flutter enterprise con una arquitectura Feature-First + Clean Architecture, lista para aplicaciones escalables y mantenibles.
🎮 ¿De qué trata?
Este proyecto sirve como plantilla inicial para aplicaciones Flutter escalables, con ejemplos de organización modular que permiten:
- Crecer en funcionalidades sin perder orden.
- Mantener separación de capas.
- Facilitar testing a diferentes niveles.
- Integrar fácilmente servicios externos.
🧩 Principios de la arquitectura
Feature-First + Clean:
Organización por Features para escalabilidad, y separación en capas (Data
, Domain
, Presentation
) para mantenibilidad y separación de responsabilidades.
Aislamiento de Módulos Centrales (Core):
Contiene configuraciones globales (Config
), manejo de errores, logging, seguridad y router.
Estos módulos son independientes de Features y garantizan un núcleo reutilizable y estable.
Componentes Reutilizables (Shared + Utils):
Shared
: Widgets, Layouts, Animaciones y Temas reutilizables.
Utils
: Helpers, Extensions, Validators, Formatters, etc.
Internacionalización (l10n):
Dedicado a soporte multi-idioma.
Infraestructura (Infrastructure):
Implementaciones concretas que interactúan con el "mundo exterior": APIs, Base de datos, Firebase, etc.
Todo desacoplado de la capa de negocio (Domain
).
✅ Beneficios de esta arquitectura
- Escalable: separación clara por Features.
- Mantenible: capas internas
Data
, Domain
, Presentation
alineadas con Clean Architecture.
- Modular:
Core
, Infrastructure
, Shared
y Utils
garantizan orden y reutilización.
- Internacionalización lista con
l10n
.
- Testing estructurado en diferentes niveles de complejidad.
🛠️ Tecnologías utilizadas
📂 Estructura del Proyecto
root_project
├── assets # 🖼️ Recursos estáticos (imágenes, íconos, fuentes)
├── test # 🧪 Carpeta de pruebas (siguiendo la pirámide de testing)
│ ├───01_Unit # ⚡ Lógica y funciones puras
│ ├───02_Widget # 🧩 Widgets aislados
│ ├───03_Golden # 🎨 Validación visual por comparación
│ ├───04_Integration # 🔗 Integración entre módulos
│ ├───05_Smoke # 🕵️ Chequeos rápidos de la app
│ ├───06_Linting # 🔍 Reglas de estilo y convenciones
│ └───07_E2E # 👑 Flujos completos del usuario
│
├── analysis_options.yaml # 📐 Reglas de análisis estático (linting)
├── pubspec.yaml # 📦 Dependencias y configuración del proyecto
├── README.md # 📖 Documentación principal
└── lib # 💻 Código fuente principal
├── main.dart # 🚀 Punto de entrada de la app
├── app.dart # ⚙️ Configuración global (tema, router, providers)
└───Src
├───Core # 🛠️ Núcleo central, accesible globalmente
│ ├───Cache # 💾 Manejo de caché local (Shape_preference)
│ ├───Config
│ │ ├───Env # 🌍 Configuración por entorno (dev/prod)
│ │ └───Keys # 🔑 Llaves/API keys/identificadores
│ ├───Errors # ❌ Manejo centralizado de errores
│ ├───Logging # 📝 Configuración de logs y tracking
│ ├───Router # 🧭 Definición de rutas y navegación global
│ └───Security # 🔒 Seguridad: cifrado, auth, permisos
│
├───Features # 📦 Módulos funcionales independientes
│ ├───Auth # 🔐 Autenticación de usuarios
│ │ ├───Data # 📡 Repositorios y fuentes de datos
│ │ ├───Domain # 🧠 Casos de uso y entidades
│ │ └───Presentation # 🎭 UI, BloCs, estados y vistas
│ └───Home # 🏠 Módulo de pantalla principal
│ ├───Data
│ ├───Domain
│ └───Presentation
│
├───Infrastructure # 🌐 Conexiones externas e implementaciones
│ ├───Api # 🔗 Clientes HTTP/REST/GraphQL
│ ├───Database # 🗄️ Acceso a bases de datos locales/remotas
│ └───Firebase # ☁️ Integración con Firebase
│
├───l10n # 🌎 Internacionalización (traducciones ARB)
│
├───Shared # ♻️ Recursos reutilizables globales
│ ├───Animations # 🎞️ Animaciones comunes
│ ├───Components # 🧱 Widgets reutilizables
│ ├───Layouts # 📐 Estructuras de pantallas
│ └───Theme # 🎨 Temas, colores y tipografía
│
└───Utils # 🔧 Utilidades generales
├───Constants # 📌 Constantes globales
├───Enums # 🗂️ Enumeraciones
├───Extensions # ➕ Extensiones de tipos nativos
├───Formatters # ✍️ Formateadores de texto, fechas, números
└───Validators # ✅ Validaciones de inputs y formularios
🧪 Pirámide de Testing
El proyecto sigue la pirámide de testing para cubrir todos los niveles, del más simple al más complejo:
[01_Unit] ⚡ Lógica y funciones puras
[02_Widget] 🧩 Widgets aislados
[03_Golden] 🎨 Comparación visual
[04_Integration] 🔗 Módulos conectados
[05_Smoke] 🕵️ Chequeos rápidos
[06_Linting] 🔍 Estándares de código
[07_E2E] 👑 Flujos completos de usuario