Una aplicación Flutter moderna que combina seguridad biométrica con funcionalidad de escaneo QR, implementando las últimas tendencias en UI/UX para 2025.
- Autenticación biométrica nativa (Huella digital/Face ID)
- Fallback a PIN de 4 dígitos
- Implementación segura usando BiometricPrompt
- Manejo de estados de autenticación
- Implementación nativa con CameraX
- Almacenamiento local con SQLite
- Historial de escaneos con timestamps
- Implementación de tendencias UI/UX 2025
- Glassmorphism y efectos de profundidad
- Animaciones y transiciones fluidas
- Clean Architecture
- BLoC para gestión de estado
- Integración nativa con Pigeon
- Código nativo en Kotlin
- Tests unitarios completos
- Flutter SDK ≥ 3.0.0
- Android Studio o VS Code con plugins de Flutter
- Android SDK con soporte para API 21+
- Dispositivo Android con soporte biométrico
-
Clonar el repositorio
git clone https://github.com/baalcoder/qr_auth_app.git cd qr_auth_app -
Instalar dependencias
flutter pub get
-
Generar código necesario
# Generar código Pigeon flutter pub run pigeon --input pigeons/auth_qr_api.dart # Generar mocks para tests flutter pub run build_runner build
-
Ejecutar la aplicación
flutter run
qr_auth_app/
├── android/ # Código nativo de Android
│ ├── app/
│ │ └── src/main/
│ │ ├── kotlin/ # Implementaciones nativas
│ │ │ └── com/example/qr_auth_app/
│ │ │ ├── AuthQrPlugin.kt # Plugin principal
│ │ │ ├── BiometricHelper.kt # Lógica biométrica
│ │ │ ├── QRScannerHelper.kt # Lógica de CameraX
│ │ │ └── MainActivity.kt # Actividad principal
│ │ └── AndroidManifest.xml # Configuración Android
│ ├── build.gradle.kts # Configuración Gradle (Kotlin DSL)
│ └── settings.gradle.kts # Configuración del proyecto
│
├── lib/
│ ├── core/ # Funcionalidad central
│ │ ├── database/
│ │ │ └── database_helper.dart # Configuración SQLite
│ │ ├── theme/
│ │ │ └── app_theme.dart # Temas y estilos globales
│ │ └── widgets/
│ │ ├── custom_tooltip.dart # Tooltips personalizados
│ │ └── info_card.dart # Tarjetas informativas
│ │
│ ├── features/ # Módulos principales
│ │ ├── auth/ # Feature de autenticación
│ │ │ ├── data/ # Capa de datos
│ │ │ ├── domain/ # Lógica de negocio
│ │ │ └── presentation/ # UI y estado
│ │ │ ├── bloc/
│ │ │ │ ├── auth_bloc.dart
│ │ │ ├── pages/
│ │ │ │ └── auth_page.dart
│ │ │ └── widgets/
│ │ │ └── pin_dialog.dart
│ │ │
│ │ └── qr_scanner/ # Feature de escaneo QR
│ │ ├── data/ # Capa de datos
│ │ ├── domain/ # Lógica de negocio
│ │ │ └── models/
│ │ │ └── qr_code.dart
│ │ └── presentation/ # UI y estado
│ │ ├── bloc/
│ │ │ ├── qr_scanner_bloc.dart
│ │ └── pages/
│ │ └── qr_scanner_page.dart
│ │
│ └── main.dart # Punto de entrada
│
├── pigeons/ # Definiciones de Pigeon
│ └── auth_qr_api.dart # Interface nativa-Flutter
│
├── test/ # Pruebas unitarias
│ ├── features/
│ │ ├── auth/
│ │ │ └── bloc/
│ │ │ └── auth_bloc_test.dart
│ │ └── qr_scanner/
│ │ ├── bloc/
│ │ │ └── qr_scanner_bloc_test.dart
│ │ └── domain/
│ │ └── models/
│ │ └── qr_code_test.dart
│ └── widget_test.dart
│
├── pubspec.yaml # Dependencias y configuración
├── README.md # Documentación
└── LICENSE # Licencia MIT
kotlin/: Implementaciones nativas en KotlinAuthQrPlugin.kt: Plugin principal que conecta Flutter con AndroidBiometricHelper.kt: Manejo de autenticación biométricaQRScannerHelper.kt: Implementación de CameraX para escaneo QRMainActivity.kt: Configuración de la actividad principal
database/: Configuración y helpers para SQLitetheme/: Definición de estilos y temas globaleswidgets/: Componentes reutilizables en toda la app
Cada feature sigue Clean Architecture con tres capas:
Auth Feature
data/: Implementación de repositorios y fuentes de datosdomain/: Entidades y casos de usopresentation/:bloc/: Manejo de estado con BLoCpages/: Pantallas principaleswidgets/: Componentes específicos
QR Scanner Feature
- Similar estructura a Auth, pero enfocado en escaneo QR
- Incluye modelo de datos QR y lógica de almacenamiento
- Definiciones de la interfaz entre Flutter y código nativo
- Genera código para comunicación segura y tipada
- Pruebas unitarias organizadas por feature
- Sigue la misma estructura que el código fuente
- Incluye mocks y helpers de testing
-
Separación de Responsabilidades
- Código nativo aislado en
android/ - Lógica de negocio en
domain/ - UI y estado en
presentation/
- Código nativo aislado en
-
Modularidad
- Features independientes
- Core compartido
- Widgets reutilizables
-
Testing
- Estructura espejo para pruebas
- Fácil navegación y mantenimiento
- Cobertura completa
-
Integración Nativa
- Pigeon para comunicación segura
- Implementaciones Kotlin optimizadas
- Separación clara de responsabilidades
-
Permisos requeridos (AndroidManifest.xml):
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.USE_BIOMETRIC" />
-
Configuración de Gradle:
- Kotlin DSL implementado
- Soporte para CameraX
- Configuración BiometricPrompt
La aplicación incluye un conjunto completo de pruebas unitarias:
# Ejecutar todas las pruebas
flutter test
# Ejecutar pruebas específicas
flutter test test/features/auth/bloc/auth_bloc_test.dart
flutter test test/features/qr_scanner/bloc/qr_scanner_bloc_test.dart- Diseño moderno con glassmorphism
- Animaciones suaves
- Tooltips informativos
- Feedback visual inmediato
- Vista de cámara con bordes animados
- Lista de códigos escaneados con diseño moderno
- Gestos para eliminar códigos
- Feedback en tiempo real
- Implementación segura de BiometricPrompt
- Almacenamiento seguro de PIN
- Manejo seguro de datos biométricos
- No almacenamiento de datos sensibles
-
Clean Architecture
- Separación clara de responsabilidades
- Código mantenible y testeable
- Dependencias unidireccionales
-
Gestión de Estado
- BLoC pattern
- Estados inmutables
- Manejo de errores consistente
-
Código Nativo
- Integración con Pigeon
- Código Kotlin optimizado
- Uso de APIs nativas modernas
-
Testing
- Pruebas unitarias extensivas
- Mocking de dependencias
- Cobertura de código significativa
- Uso de BiometricPrompt para autenticación nativa
- Fallback automático a PIN
- Manejo de diferentes tipos de biometría
- Implementación optimizada con CameraX
- Procesamiento en tiempo real
- Almacenamiento eficiente en SQLite
- Diseño adaptativo
- Soporte para temas
- Animaciones optimizadas
- Feedback táctil y visual
- Fork el proyecto
- Crea tu Feature Branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push al Branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
- Sebastian Balvin Mendoza - v1.0 - baalcoder
- Flutter Team por el excelente framework
- La comunidad de Flutter por su apoyo