initialize method
Initializes hardware cameras and starts live stream processing with auto-recovery.
Implementation
Future<void> initialize() async {
if (_isInitialized || _isInitializing || _isDisposed) return;
_isInitializing = true;
_errorMessage = null;
_safeNotifyListeners();
try {
_scanEngine.initialize();
_availableCameras = await availableCamerasFunc();
if (_availableCameras.isNotEmpty && !_isDisposed) {
final camera = _availableCameras[_selectedCameraIndex];
_cameraController = cam.CameraController(
camera,
resolutionPreset,
enableAudio: false,
imageFormatGroup: defaultTargetPlatform == TargetPlatform.android
? cam.ImageFormatGroup.yuv420
: cam.ImageFormatGroup.bgra8888,
);
await _cameraController!.initialize();
if (_isDisposed) return;
try {
_minZoomLevel = await _cameraController!.getMinZoomLevel();
_maxZoomLevel = await _cameraController!.getMaxZoomLevel();
if (options.continuousAutofocus) {
await _cameraController!.setFocusMode(cam.FocusMode.auto);
}
} catch (_) {}
_startLiveImageStream();
_isInitialized = true;
} else {
_errorMessage = 'No camera devices available on this hardware.';
}
} catch (e) {
_errorMessage = 'Camera initialization failed: ${e.toString()}';
debugPrint(_errorMessage);
_isInitialized = false;
} finally {
_isInitializing = false;
_safeNotifyListeners();
}
}