Estructura del Proyecto
Organización General
class="highlight">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Capi-App/
├── lib/ # Código fuente principal
│ ├── actions/ # Acciones de FlutterFlow
│ ├── app_constants.dart # Constantes de la aplicación
│ ├── app_state.dart # Estado global
│ ├── auth/ # Autenticación
│ ├── backend/ # Backend y schemas
│ ├── chat/ # Sistema de chat
│ ├── clinica/ # Módulo de clínica
│ ├── componentes/ # Componentes reutilizables
│ ├── components/ # Componentes adicionales
│ ├── custom_code/ # Código personalizado
│ ├── flutter_flow/ # Framework FlutterFlow
│ ├── models/ # Modelos de datos
│ ├── paciente/ # Módulo de paciente
│ ├── services/ # Servicios de negocio
│ └── validacion_rol/ # Validación de roles
├── firebase/ # Firebase Functions y config
│ ├── functions/ # Cloud Functions
│ ├── public/ # Archivos públicos
│ ├── firestore.rules # Reglas de seguridad
│ └── storage.rules # Reglas de Storage
├── android/ # Configuración Android
├── ios/ # Configuración iOS
├── web/ # Configuración Web
├── docs/ # Documentación
└── assets/ # Recursos estáticos
Estructura de lib/
auth/
Manejo de autenticación con Firebase Auth.
class="highlight">1
2
3
4
5
auth/
├── firebase_auth/ # Implementación Firebase Auth
│ ├── auth_util.dart # Utilidades de autenticación
│ └── ...
└── auth_manager.dart # Gestor de autenticación
backend/
Schemas y acceso a datos de Firestore.
class="highlight">1
2
3
4
5
6
7
8
backend/
├── schema/ # Schemas de Firestore
│ ├── structs/ # Estructuras de datos
│ ├── enums/ # Enumeraciones
│ └── *.dart # Records de colecciones
├── api_requests/ # Llamadas a APIs externas
│ └── api_calls.dart # Definiciones de APIs
└── backend.dart # Exportaciones principales
clinica/
Módulo completo para gestión de clínica.
class="highlight">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clinica/
├── menu_principal/ # Menú principal de clínica
│ ├── estadisticas/ # Dashboard de estadísticas
│ ├── calendario/ # Calendario de citas
│ ├── conversaciones/ # Lista de chats
│ ├── citas/ # Gestión de citas
│ ├── consultas/ # Gestión de consultas
│ ├── perfil/ # Perfil del doctor
│ └── mi_plan/ # Gestión de suscripción
├── otraspaginas/ # Páginas adicionales
│ ├── detalles_paciente/ # Detalles de paciente
│ ├── crear_servicio/ # Crear servicio médico
│ ├── equipo/ # Gestión de equipo
│ └── ...
├── configuracion/ # Configuración de clínica
├── crear_cuenta/ # Registro de cuenta
├── login/ # Login
└── ...
paciente/
Módulo completo para pacientes.
class="highlight">1
2
3
4
5
6
7
8
paciente/
├── menu/ # Menú principal paciente
│ ├── citaspaciente/ # Citas del paciente
│ ├── conversacionespaciente/ # Chats del paciente
│ └── misdoctores_pac/ # Doctores del paciente
├── perfil/ # Perfil del paciente
├── buscadordoctores/ # Búsqueda de doctores
└── ...
services/
Servicios de negocio y utilidades.
class="highlight">1
2
3
4
5
6
7
services/
├── subscription_service.dart # Gestión de suscripciones
├── revenuecat_service.dart # RevenueCat (iOS)
├── notification_service.dart # Notificaciones push
├── permissions_manager.dart # Gestión de permisos
├── chat_notification_service.dart # Notificaciones de chat
└── ...
custom_code/
Código personalizado y acciones.
class="highlight">1
2
3
4
5
6
7
custom_code/
├── actions/ # Acciones personalizadas
│ ├── validar_suscripcion_action.dart
│ ├── receta_pdf.dart
│ ├── busqueda_*.dart
│ └── ...
└── widgets/ # Widgets personalizados
Convenciones de Código
Nomenclatura
- Archivos:
snake_case.dart - Clases:
PascalCase - Variables:
camelCase - Constantes:
SCREAMING_SNAKE_CASE
Estructura de Widgets
class="highlight">1
2
3
4
5
6
7
8
9
10
class MiWidget extends StatefulWidget {
// Constructor y propiedades
}
class _MiWidgetState extends State<MiWidget> {
// Estado local
// Métodos de ciclo de vida
// Métodos de negocio
// Build method
}
Estructura de Servicios
class="highlight">1
2
3
4
5
6
7
class MiService {
static final MiService _instance = MiService._internal();
factory MiService() => _instance;
MiService._internal();
// Métodos públicos
}
Patrones Utilizados
Singleton
Para servicios compartidos:
class="highlight">1
2
3
4
class SubscriptionService {
static final SubscriptionService _instance = SubscriptionService._internal();
factory SubscriptionService() => _instance;
}
Repository Pattern
Para acceso a datos:
class="highlight">1
2
3
4
class UsersRepository {
Future<List<UsersRecord>> getUsers();
Future<void> createUser(UsersRecord user);
}
Service Layer
Para lógica de negocio:
class="highlight">1
2
3
class BusinessService {
Future<void> processSubscription();
}
Archivos Importantes
app_constants.dart
Constantes globales de la aplicación:
- API keys
- URLs
- Configuraciones
app_state.dart
Estado global de la aplicación:
- Usuario actual
- Configuración
- Preferencias
index.dart
Exportaciones principales de páginas y componentes.
Próximos Pasos
- Backend Firebase - Entiende Firestore y servicios
- Autenticación y Roles - Sistema de permisos
Anterior: Instalación y Configuración ← Siguiente: Backend Firebase →