initialize method

Future<void> initialize()

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();
  }
}