Portal Técnico: Arquitectura de PrestaApp
Esta documentación está dirigida a desarrolladores y mantenedores técnicos de la aplicación PrestaApp V3. Detalla la arquitectura subyacente, el stack tecnológico y las decisiones de diseño fundamentales que hacen de esta aplicación una herramienta robusta, rápida y extremadamente segura.
🏗️ 1. Arquitectura y Patrones Base
La aplicación ha sido estructurada utilizando principios de Clean Architecture, asegurando que la lógica de negocio esté completamente desacoplada de la interfaz de usuario y de la infraestructura de la base de datos.
- Modularización: El proyecto (
/lib) está segmentado en capas claras:data,models,providers,router,screens,services,themeywidgets. - Patrón Repositorio: Se utiliza una abstracción de acceso a datos mediante interfaces (ej:
IPrestamoRepository,ITransaccionRepository). Esto permite que la implementación en SQLite (prestamo_repository.dart) pueda ser fácilmente testeada, simulada (mockeada) o incluso reemplazada en el futuro por una base de datos en la nube sin afectar el resto del sistema.
🚦 2. Gestión de Estado y Enrutamiento
Para garantizar una experiencia fluida, mantenible y reactiva a los cambios de datos, se eligieron las siguientes tecnologías:
- Manejo de Estado (Riverpod 3.x): Utilizado como gestor principal mediante
flutter_riverpod. Proveedores avanzados comoAsyncNotifierProviderse encargan de manejar estados asíncronos complejos, inyectar dependencias y mantener la UI sincronizada en tiempo real sin recargas innecesarias. - Enrutamiento (GoRouter): Permite un sistema de navegación declarativo y fuertemente tipado. Soporta deep linking, y estructura la navegación mediante
StatefulShellRoute.indexedStack(preservando el estado de los tabs en la barra inferior). Además, cuenta con Guards (redirecciones) para proteger rutas basándose en el estado de autenticación (PIN) del usuario.
🔐 3. Base de Datos y Almacenamiento Seguro
El núcleo de protección de datos personales y financieros reside en un esquema de cifrado híbrido:
- Base de Datos Encriptada (SQLCipher): Se implementó
sqflite_sqlcipherpara proporcionar encriptación AES de 256 bits a nivel de archivo (data at rest). Adicionalmente, cuenta con soporte FFI (sqflite_common_ffi), lo que permite correr SQLite de manera nativa en escritorios Windows y Linux para desarrollo y testing. - Almacenamiento de Claves (Secure Storage): La contraseña para desencriptar SQLite no está en código duro; se genera dinámicamente y se almacena en el sistema de alta seguridad del propio dispositivo operativo (Keystore en Android, Keychain en iOS) utilizando
flutter_secure_storage. También se guarda aquí el hash del PIN y sus respuestas de seguridad.
⚡ 4. Procesamiento Intensivo y Rendimiento
PrestaApp mantiene siempre los fluidos 60fps en la interfaz delegando los trabajos pesados a hilos de procesamiento en segundo plano.
- Uso de Isolates (
Isolate.run): Cualquier tarea que sea computacionalmente pesada se descarga del hilo principal.- Hashing Criptográfico: La función de seguridad que deriva el PIN del usuario mediante PBKDF2 (100,000 iteraciones con algoritmo HMAC-SHA256 y un salt de 16-bytes en Base64Url) corre en un Isolate.
- Generación de Reportes PDF: La creación de estados de cuenta utilizando el paquete
pdf(que involucra pintar tablas dinámicas y cálculos financieros agregados) se renderiza también en un Isolate secundario antes de presentarse al usuario.
🛡️ 5. RASP (Runtime Application Self-Protection)
La aplicación tiene la capacidad de protegerse a sí misma mientras se está ejecutando:
- Prevención de Capturas de Pantalla: Uso intensivo de
flutter_windowmanagera nivel nativo en Android para evitar que capturas de pantalla, grabaciones de pantalla o aplicaciones maliciosas en segundo plano intercepten las vistas financieras sensibles de la aplicación. - Detección de Dispositivos Comprometidos: Utilizando
flutter_jailbreak_detection, la aplicación se autoevalúa en el arranque y advierte o bloquea su uso en entornos Root o Jailbroken, donde la seguridad del sandbox del sistema operativo ha sido vulnerada.
Desarrollado y mantenido por el equipo de ingeniería de PrestaApp.