start static method
Future<void>
start(
- BuildContext context, {
- required String apiToken,
- Environment environment = Environment.SANDBOX,
- dynamic onComplete()?,
- dynamic onError()?,
Start the verification flow
Parameters:
context: BuildContext for navigationapiToken: Authentication token from Surepassenvironment: Environment to use (default: Environment.SANDBOX)onComplete: Callback when verification completesonError: 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()}');
}
}
}