Integración de Extracción de Datos de Imágenes en Flutter con Bloc

Clase 23 de 29Curso de Integración Módulos Nativos iOS/Android para Flutter

Resumen

Integrar funciones avanzadas como la extracción de datos desde imágenes directamente en aplicaciones Flutter es posible gracias a metodologías claras como Bloc. Comprender cómo realizar esta integración proporciona herramientas útiles para gestionar transacciones financieras automatizadas y eficaces.

¿Cómo agregar la funcionalidad de imágenes en nuestro bloc?

Para añadir esta funcionalidad, primero accedemos al bloque relacionado con ingresos y gastos (income expense) dentro del proyecto Flutter actual. Es necesario crear un nuevo evento llamado transaction from image, que manejará la información obtenida desde imágenes.

Este evento será asíncrono e implica:

  • Emitir inicialmente un estado de carga indicando el procesamiento en curso.
  • Almacenar temporalmente el monto obtenido directamente de la imagen mediante una función que crearemos en el repositorio (extraer monto de imagen).
  • Realizar una validación que asegure el monto leído sea correcto y positivo.

¿Qué hacer en caso de error durante la extracción de montos?

La función debe estar preparada para manejar errores comunes. Si el monto extraído no es mayor a cero, se emitirá automáticamente un evento de error con una notificación clara como «no se detectó un monto válido en la imagen».

En adicional, siempre conviene incluir un bloque try-catch para manejar cualquier excepción imprevista durante el proceso. Esto permite emitir un mensaje específico («error. processing. transaction from image») indicando con detalle problemas al ejecutar el método.

¿Cómo se almacena en el modelo la información extraída?

Luego de validar correctamente los datos obtenidos desde la imagen, se utiliza un modelo previamente establecido como income expense que incluye estos datos básicos:

  • Monto: valor numérico colectado desde la imagen.
  • Descripción: asignación de "autodetectado" por tratarse de un recibo analizado automáticamente.
  • Fecha: definida automáticamente, coincidiendo con la hora exacta de procesamiento: DateTime.now().
  • Tipo: clasificado como gasto (expense) por el contexto típicamente relacionado a recibos.

Se realiza la conversión necesaria del tipo de dato del monto (de double a integer) previo a su inserción en el modelo.

¿Qué pasos hay después de guardar los datos?

Luego de generar correctamente el modelo:

  1. Se envía al repositorio mediante la función agregar transacción.
  2. Posteriormente se actualizan los datos existentes obteniendo nuevamente todas las transacciones (fetch) desde este mismo repositorio.
  3. Finalmente se emite un transaction loaded, cargando de nuevo todos los elementos en la interfaz para reflejar inmediatamente el cambio efectuado.

Cada uno de estos pasos clave fortalece la fluidez del proceso y garantiza resultados efectivos al implementar un bloc que interactúa con información visual dentro de Flutter.

Te invitamos a compartir tus dudas o experiencias implementando Bloc en Flutter comentando abajo.