start static method

Future<void> start(
  1. BuildContext context, {
  2. required String apiToken,
  3. Environment environment = Environment.SANDBOX,
  4. dynamic onComplete(
    1. VerificationResult
    )?,
  5. dynamic onError(
    1. String
    )?,
})

Start the verification flow

Parameters:

  • context: BuildContext for navigation
  • apiToken: Authentication token from Surepass
  • environment: Environment to use (default: Environment.SANDBOX)
  • onComplete: Callback when verification completes
  • onError: Callback for error handling

Implementation

static Future<void> start(
  BuildContext context, {
  required String apiToken,
  Environment environment = Environment.SANDBOX,
  Function(VerificationResult)? onComplete,
  Function(String)? onError,
}) async {
  try {
    // Initialize API service
    final apiService = ApiService();
    apiService.setEnvironment(environment);

    // Login with provided token
    final loginResponse = await apiService.login(apiToken);

    // Check login success
    if (loginResponse.success != true) {
      if (onError != null) {
        onError(loginResponse.message ?? 'Login failed');
      }
      return;
    }

    // Send initiate footprint
    try {
      final footprintResponse = await apiService.postFootprint('initiate');
      if (footprintResponse.statusCode != 200) {
        if (onError != null) {
          onError(
            'Login failed with status code: ${footprintResponse.statusCode}',
          );
        }
        return;
      }
      print('✅ Initiate footprint sent');
    } catch (e) {
      print('⚠️ Failed to send initiate footprint: $e');
      // Continue - footprint is for tracking, not blocking
    }

    // Get options data
    final optionsData = loginResponse.data;

    // Check if main screen should be skipped
    final shouldSkipMainScreen = optionsData?.skipMainScreen ?? false;

    if (shouldSkipMainScreen) {
      // Skip main screen - go directly to DigiLocker
      await _navigateToDigiLocker(
        context,
        apiService,
        optionsData,
        environment,
        onComplete,
        onError,
      );
    } else {
      // Show verification screen first
      await _navigateToVerificationScreen(
        context,
        apiService,
        environment,
        onComplete,
        onError,
      );
    }
  } catch (e) {
    if (onError != null) {
      onError('SDK initialization failed: ${e.toString()}');
    }
  }
}