startKYC method

Future<Result<String>> startKYC({
  1. required String customerId,
  2. required String identifier,
  3. required String accessToken,
})

Implementation

Future<Result<String>> startKYC({
  required String customerId,
  required String identifier,
  required String accessToken,
}) async {
  // Skip KYC start for web platform
  if (kIsWeb) {
    print('🌐 Web platform detected - skipping Digio KYC start');
    return const Success('Web platform - KYC skipped');
  }

  if (_isProcessing) {
    return const Failure('KYC process already in progress');
  }

  if (_userCancelled) {
    print('⚠️ User cancelled previous session, ignoring auto-trigger');
    return const Failure('User cancelled previous session');
  }

  try {
    if (_kycWorkflowPlugin == null) {
      return const Failure('KYC SDK not initialized');
    }

    _isProcessing = true;
    _userCancelled = false;
    HashMap<String, String> additionalData = HashMap<String, String>();

    print('🚀 Calling Digio SDK start...');
    print('📋 Customer ID: $customerId');
    print('📋 Identifier: $identifier');

    final result = await _kycWorkflowPlugin!.start(
      customerId,
      identifier,
      accessToken,
      additionalData,
    );

    print('✅ Digio SDK completed with result: $result');

    // Check if result indicates user cancellation
    final resultStr = result.toString();
    if (resultStr.contains('cancelled') ||
        resultStr.contains('back') ||
        resultStr.contains('closed')) {
      _userCancelled = true;
      print('🚫 User cancelled Digio SDK');
    }

    return Success(resultStr);
  } catch (e) {
    print('❌ Digio SDK error: $e');
    _userCancelled = true;
    return Failure('Failed to start KYC: $e');
  } finally {
    _isProcessing = false;
    print('🏁 SDK processing flag cleared');
  }
}