processImage method

Future<void> processImage(
  1. String setupFailedError,
  2. String imageDataTooLargeError,
  3. String serverCouldNotProcessImageError,
  4. String mediaFormatNotSupportedError,
)

Implementation

Future<void> processImage(String setupFailedError, String imageDataTooLargeError, String serverCouldNotProcessImageError, String mediaFormatNotSupportedError) async {
  if (_isDisposed || state.capturedImage == null) {
    return;
  }

  final capturedImageFile = state.capturedImage!;

  if (state.showError) {
    dismissError();
  }

  _safeSetState(state.copyWith(isProcessing: true, uploadProgress: 0.04));

  final videoFile = await stopVideoRecording();
  await stopSession();

  _cancelUploadTask();

  _uploadTask = Completer<void>();

  if (_isDisposed) {
    return;
  }

  try {
    await simulatePreparationProgress();

    if (!_isDisposed) {
      await uploadImageAndVideo(capturedImageFile, videoFile, setupFailedError, imageDataTooLargeError, serverCouldNotProcessImageError, mediaFormatNotSupportedError);
    }

    if (!_isDisposed) {
      _safeSetState(DocumentScanState(
        screen: side == DocumentSide.front
            ? AppScreen.scanIdDocumentFrontScreen
            : AppScreen.scanIdDocumentBackScreen,
        currentSide: side,
        cameraState: CameraState.ready,
      ));

      try {
        if (await capturedImageFile.exists()) {
          await capturedImageFile.delete();
        }
      } catch (e) {
        // Handle error silently
      }
    }

    _uploadTask?.complete();
  } catch (error) {
    if (error != 'Cancelled' && !_isDisposed) {
      _handleUploadError(error, setupFailedError, imageDataTooLargeError, serverCouldNotProcessImageError, mediaFormatNotSupportedError);
    }
  }
}