Skip to content

feat: pegar QR desde la galería de imágenes #113

Description

@Delgado74

Descripción

Actualmente la app solo permite ingresar datos de facturas/direcciones Lightning mediante dos vías:

  1. Escaneo por cámara — usando mobile_scanner en QRScannerWidget (lib/widgets/qr_scanner_widget.dart)
  2. Pegado desde clipboard — texto plano en SendScreen._pasteFromClipboard() (lib/screens/10send_screen.dart:66)

Sin embargo, es frecuente que los usuarios reciban capturas de pantalla o códigos QR guardados en la galería del dispositivo. Esta funcionalidad es un estándar en otras wallets Lightning (Phoenix, Breez, Zeus) y mejora significativamente la UX al eliminar la necesidad de usar un segundo dispositivo o hacer pantalla dividida.

Solución propuesta

Usar la API existente de mobile_scanner v5.2.3 (ya incluido en pubspec.yaml) que expone el método:

Future<BarcodeCapture?> MobileScannerController.analyzeImage(String path)

Esto permite decodificar un código QR desde un archivo de imagen sin añadir dependencias extra de QR decoding.

Dependencia a añadir

Paquete Propósito
image_picker Seleccionar imágenes desde la galería del dispositivo

Flujo

  1. Añadir botón "Pegar desde galería" (icono de galería/imagen) en la UI del scanner
  2. Al pulsarlo, invocar ImagePicker().pickImage(source: ImageSource.gallery)
  3. Tomar el path del archivo seleccionado
  4. Instanciar MobileScannerController y llamar analyzeImage(path)
  5. Procesar el BarcodeCapture resultante con el mismo flujo que el escaneo por cámara

Archivos a modificar

Archivo Cambio
pubspec.yaml Añadir image_picker como dependencia
lib/widgets/qr_scanner_widget.dart Añadir botón "Galería" en el área de acciones (junto a flash/switch cámara) + lógica de analyzeImage
lib/screens/10send_screen.dart Opcional: añadir acceso directo desde los botones de acción
lib/screens/voucher_scan_screen.dart Opcional: añadir acceso directo

Criterios de aceptación

  • Al seleccionar una imagen de la galería, el QR se decodifica correctamente
  • Si la imagen no contiene un QR válido, se muestra un mensaje de error claro (SnackBar)
  • El resultado se procesa con el mismo parser/validador que el escaneo por cámara
  • Funciona en Android e iOS
  • Manejo de errores: permiso denegado, archivo corrupto, imagen sin QR

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions