createCamera method
Create new camera
Implementation
Future<CameraController?> createCamera({
CameraDescription? cameraDescription,
}) async {
// if (cameraDescription == null) {
// _controllerNotifier.value = const ControllerValue();
// }
// Clear error first
if (value.error != null) {
value = value.copyWith();
}
var description = cameraDescription ?? value.cameraDescription;
var cameras = value.cameras;
// Fetch camera descriptions is description is not available
if (description == null) {
cameras = await availableCameras();
if (cameras.isNotEmpty) {
description = cameras[0];
} else {
description = const CameraDescription(
name: 'Simulator',
lensDirection: CameraLensDirection.front,
sensorOrientation: 0,
);
}
}
// create camera controller
_cameraController = CameraController(
description,
setting.resolutionPreset,
enableAudio: value.enableAudio,
imageFormatGroup: _setting.imageFormatGroup,
);
final controller = _cameraController!;
// listen controller
controller.addListener(() {
if (controller.value.hasError) {
final error = 'Camera error ${controller.value.errorDescription}';
final exception = CameraException('createCamera', error);
value = value.copyWith(error: exception);
return;
// _controllerNotifier.value =
// _controllerNotifier.value.copyWith(error: error);
}
});
try {
await controller.initialize();
// _controllerNotifier.value = ControllerValue(
// controller: controller,
// isReady: true,
// );
value = value.copyWith(
cameraDescription: description,
cameras: cameras,
);
if (controller.description.lensDirection == CameraLensDirection.back) {
unawaited(controller.setFlashMode(value.flashMode));
}
unawaited(
Future.wait([
controller
.getMinExposureOffset()
.then(_exposureController.setMinExposure),
controller
.getMaxExposureOffset()
.then(_exposureController.setMaxExposure),
controller.getMaxZoomLevel().then(_zoomController.setMaxZoom),
controller.getMinZoomLevel().then(_zoomController.setMinZoom),
]),
);
} on CameraException catch (e) {
value = value.copyWith(error: e);
return null;
} catch (e) {
final exception = CameraException('createCamera', e.toString());
value = value.copyWith(error: exception);
return null;
}
return controller;
}