takePicture method

Future<CaptureImageModel> takePicture({
  1. bool includeExif = false,
})

Captures a picture using the active camera and returns the file. If the camera controller is not initialized, this function will throw an error

  • includeExif - if this true, the model will return exifData

Implementation

Future<CaptureImageModel> takePicture({bool includeExif = false}) async {
  if (_cameraController == null) {
    throw FeatureCameraException(
      code: ErrorConstant.MISSING_CAMERA_CONTROLLER,
      message: 'Camera Controller not yet initialized',
    );
  }
  final xFile = await _cameraController!.takePicture();
  final newFile = File(xFile.path);
  Map<String, IfdTag>? exifData;
  if (includeExif) {
    try {
      exifData = await readExifFromFile(newFile);
    } catch (e) {
      log("failed to fetch exif data: $e");
    }
  }
  if (Platform.isIOS) return CaptureImageModel(file: newFile, exifData: exifData);
  final imageBytes = await xFile.readAsBytes();
  image_lib.Image? originalImage;
  try {
    originalImage = image_lib.decodeImage(imageBytes);
  } catch (e) {
    log("failed to decode image: $e");
  }
  if (originalImage == null) return CaptureImageModel(file: newFile, exifData: exifData);
  if (cameraLensDirection == CameraLensDirection.back) return CaptureImageModel(file: newFile, exifData: exifData);
  final fixedImage = image_lib.flipHorizontal(originalImage);
  await newFile.writeAsBytes(image_lib.encodeJpg(fixedImage), flush: true);
  return CaptureImageModel(file: newFile, exifData: exifData);
}