# Instrucciones de Copilot para Proyectos Flutter ## Requisitos de Proceso Importantes - SIEMPRE presenta un plan detallado y espera aprobación explícita antes de implementar cualquier cambio de código - No proceder con la implementación hasta recibir confirmación del usuario - Al presentar el plan, proporciona un desglose paso a paso de todos los archivos a crear o modificar - Pregunta directamente: "¿Apruebas este plan antes de proceder con la implementación?" ## Convenciones de Nomenclatura Flutter/Dart ### Patrones Generales de Nomenclatura | Tipo de Elemento | Patrón/Estilo | Ejemplo(s) | |------------------|---------------|------------| | **Clases** | `PascalCase` | `UserWidget`, `HomeScreen` | | **Variables/Funciones** | `camelCase` | `userName`, `getUserData()` | | **Constantes** | `lowerCamelCase` | `defaultPadding`, `primaryColor` | | **Archivos** | `snake_case` | `user_screen.dart`, `home_widget.dart` | | **Packages** | `snake_case` | `my_app`, `user_service` | | **Directorios** | `snake_case` | `lib/screens/`, `lib/widgets/` | ## Estructura de Proyecto Recomendada ``` lib/ ├── main.dart ├── app.dart ├── core/ │ ├── constants/ │ ├── theme/ │ ├── utils/ │ └── services/ ├── features/ │ ├── auth/ │ │ ├── data/ │ │ ├── domain/ │ │ └── presentation/ │ └── home/ ├── shared/ │ ├── widgets/ │ ├── models/ │ └── services/ └── config/ ├── routes/ └── env/ ``` ## Mejores Prácticas de Desarrollo ### State Management - Usar **Bloc/Cubit** para estado complejo - **Provider** para estado simple - **Riverpod** como alternativa moderna - Evitar **setState** en widgets complejos ### Performance - Usar **const constructors** siempre que sea posible - Implementar **keys** en widgets dinámicos - Usar **ListView.builder** para listas largas - Evitar widgets innecesarios en el build method ### Código Limpio - Un widget por archivo - Extraer widgets complejos a archivos separados - Usar **extension methods** para funcionalidad común - Implementar **sealed classes** para estados