takePicture method
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);
}