Controladores de imagen en iOS con Flutter

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

Resumen

Aprender a manejar imágenes y posibles errores al capturar fotografías con Flutter en dispositivos iOS es esencial para ofrecer una mejor experiencia al usuario. Implementarás controladores específicos para gestionar tanto capturas exitosas como ejecuciones canceladas o errores en la captura de imágenes, ayudando así a prevenir fallas inesperadas en la app.

¿Cómo crear el controlador de imágenes?

Primero, necesitas crear un controlador que gestione la captura de imágenes. Define una función denominada imagePickController, que tome como parámetro el controlador del UI, conocido como UIImagePickerController. Dentro de esta función, se captura el resultado de la selección o toma de imagen.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])

¿Cómo manejar imágenes capturadas exitosamente?

Si la captura ha sido exitosa, debes seguir un proceso específico:

  • Primero comprueba si existe la imagen capturada usando la clave originalImage del objeto info.
  • Luego, almacena esta imagen en una variable llamada imageData, comprimiendo la imagen JPEG con calidad de 0.8.
  • A continuación, define un directorio temporal para almacenar de forma provisional la imagen capturada nombrada como captureImage.jpg.
  • Finalmente, usa el FileManager para escribir la información comprimida de la imagen en dicho directorio temporal.

Este proceso se refleja con la siguiente estructura:

if let image = info[.originalImage] as? UIImage {
    let imageData = image.jpegData(compressionQuality: 0.8)
    let path = FileManager.default.temporaryDirectory.appendingPathComponent("captureImage.jpg")
    try? imageData?.write(to: path)
}

¿Qué pasa si se cancela la captura o hay un error?

También debes implementar el manejo específico de errores y cancelaciones en dos escenarios claros:

  • Cuando el usuario cancela de forma explícita la operación.
  • Cuando ocurre un error inesperado y no hay imagen capturada.

Para estos casos, crea un controlador alternativo que solo gestiona cancelaciones o errores:

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
    let error = FlutterError(code: "cancelado",
                             message: "el usuario canceló esta operación",
                             details: nil)
}

En caso de no capturar imagen alguna:

let error = FlutterError(code: "noImageCapture",
                         message: "no se capturó la imagen",
                         details: nil)

Conociendo estas estructuras y ejemplos, ahora es posible desarrollar un sistema robusto y efectivo para trabajar con imágenes y gestionar correctamente errores al integrarse con Flutter en iOS.

¿Qué dudas tienes sobre esta implementación? ¡Comparte en los comentarios y aprendamos juntos!