startLivenessCapture method

Future<void> startLivenessCapture()

Implementation

Future<void> startLivenessCapture() async {
  if (state.isLoading) {
    _pendingCaptureRequest = true;
    return;
  }

  if (!state.isAvailable) {
    String errorMessage = 'Liveness detection not available on this device';
    if (_context != null) {
      errorMessage = ApiErrorStrings(_context!).anErrorOccurred;
    }

    state = state.copyWith(
      state: LivenessState.error,
      sessionState: LivenessSessionState.error,
      errorMessage: errorMessage,
    );
    return;
  }

  try {
    _pendingCaptureRequest = false;

    state = state.copyWith(
      state: LivenessState.loading,
      sessionState: LivenessSessionState.initializing,
      isLoading: true,
      errorMessage: null,
    );

    final apiClient = _ref.read(apiClientProvider);
    final response = await apiClient.perform(StartLivenessCaptureRequest());
    final session = response.livenessSession;

    state = state.copyWith(
      state: LivenessState.sessionReady,
      sessionState: LivenessSessionState.ready,
      session: session,
      isLoading: false,
    );

    onLivenessStarted();

    await BynnPlatformInterface.instance.startLivenessDetection(
      sessionId: session.sessionId,
      accessKeyId: session.credentials.id,
      secretAccessKey: session.credentials.accessKey,
      sessionToken: session.credentials.token,
      region: 'eu-west-1',
    );

    await _handleLivenessCompleted();

  } catch (e) {
    String errorMessage = e.toString();
    if (_context != null) {
      errorMessage = AgeVerificationStrings(_context!).somethingWentWrong;
    }

    state = state.copyWith(
      state: LivenessState.error,
      sessionState: LivenessSessionState.error,
      errorMessage: errorMessage,
      isLoading: false,
    );
  }
}