captureMultiple method

Future<void> captureMultiple({
  1. required List<MediaCaptureConfig> captureConfigs(
    1. ImageCaptureConfig defaultConfig
    ),
  2. required void onPictureTaken(
    1. int index,
    2. MediaCaptureConfig captureConfig,
    3. InspectionMedia<MediaCaptureConfig> data
    ),
  3. CaptureFailureHandler? onCaptureFailure,
  4. CaptureFlowHandler? captureFlowHandler,
})

Implementation

Future<void> captureMultiple({
  required List<MediaCaptureConfig> Function(ImageCaptureConfig defaultConfig)
      captureConfigs,
  required void Function(
    int index,
    MediaCaptureConfig captureConfig,
    InspectionMedia data,
  ) onPictureTaken,

  /// Return true to continue the flow, false to exit it.
  CaptureFailureHandler? onCaptureFailure,
  CaptureFlowHandler? captureFlowHandler,
}) async {
  final cameras = await InspectionCamera.initCameras();

  final configs = captureConfigs.call(defaultCaptureConfig);
  final cameraConfig = await CameraConfig.generate(
    captureConfig: configs.first,
    cameras: cameras,
    resolutionPreset: defaultCaptureConfig.resolutionPreset,
    onComplete: navigationHandler.closeScreen,
  );

  for (var i = 0; i < configs.length; i++) {
    final config = configs[i];

    if (kIsWeb ||
        _doesControllerNeedReInit(cameraConfig.cameraController, config)) {
      await cameraConfig.reInitController(
        initialCameraLensDirection: config.defaultCameraLensDirection,
        resolutionPreset: config.resolutionPreset,
      );
    }
    final cameraController = cameraConfig.cameraController;
    if (cameraController.description.lensDirection !=
        config.defaultCameraLensDirection) {
      await cameraController.setDescription(
        cameras.getCamera(
          config.defaultCameraLensDirection,
          returnDefaultOnNoMatch: true,
        ),
      );
    }

    try {
      final image = await _takeMedia(
        cameraConfig: cameraConfig,
        captureConfig: config,
      );
      if (kIsWeb) {
        await cameraController.dispose();
      }
      onPictureTaken.call(
        i,
        config,
        image,
      );
      if (captureFlowHandler != null) {
        if (!(await captureFlowHandler(i, config))) {
          break;
        }
      }
    } catch (e, s) {
      if (!(onCaptureFailure
              ?.call(i, config, (exception: e, stackTrace: s)) ??
          true)) {
        break;
      }
    }
  }
  if (!kIsWeb) {
    await cameraConfig.cameraController.dispose();
  }
}