saafe_aa_sdk 0.1.4
saafe_aa_sdk: ^0.1.4 copied to clipboard
Flutter SDK for integrating SAAFE's secure authentication and financial experience
SAAFE SDK for Flutter #
This Flutter SDK provides a simple interface to integrate SAAFE's secure authentication and financial experience into your Flutter applications.
Features #
- 🔒 Secure authentication and redirection flows
- 📱 Platform detection (iOS, Android, Flutter)
- 🌓 Theme support (light, dark, system)
- 📏 Forced portrait orientation during flows
- 🔗 External links handling with intelligent fallbacks
- ✅ Confirmation dialogs for closing flows
- 🖥️ High-resolution WebView with optimized text rendering
Installation #
Add the SDK to your pubspec.yaml:
dependencies:
saafe_aa_sdk: ^0.1.4
Usage #
Initialize the SDK #
Initialize the SDK in your main.dart file before calling runApp():
import 'package:saafe_aa_sdk/saafe_sdk.dart';
void main() async {
// Initialize with default redirect URL
await SaafeSdk.initialize();
// Or with a custom redirect URL
// await SaafeSdk.initialize(customRedirectUrl: 'https://your-custom-url.example.com/login');
runApp(const MyApp());
}
Trigger the Redirect Flow #
Trigger the redirect flow using the parameters from your generated consent response:
// First, get the consent response from SAAFE API
// The response will look like this:
/*
{
"status": "success",
"code": "OperationSuccess",
"msg": "Operation Success",
"request_id": 7788,
"txn_id": "daa53abbc1-7fe7-4984-8879-197883daba9d",
"url": "https://sandbox.redirection.saafe.in/login/?fi=WU9AUEBGV0dXUB5QWUc=&reqdate=160520250536024&ecreq=PuH3d0DSVsNCH3tfu86D4iNKTOYZyyftje7GLsc84gwMcmjFifpO9Pf4v8gDZ0lN4pD7Koskq-CkrHFGRpkvh16HVVjCjmhHiQaKRGuRo1MjoxiqicJJcQP0k-MJwDYR6krtMHFr3RP_W4Trlj2aAxeoucAvoJhGI1Lm5fnsCnnU64BHl7vPHGyXovHZIXl4sr8_HLQPuBkgLUy5oeu0fDDY62ajnztF40KufzuNe5MLI0Aut2_OjR-S94rdFrkbM6IseaBsPbpZnnibU8GuKL3A9idlvBDbLRNvEtgnjKy6AKGMAWQtEC1l6waJKeedhl0j4qCpNLtNBOCXb3VS5sf5kafDitfuSgpJ0pfuA-8=",
"consent_handle": [
"8bce1c3b-f289-4c1c-8d4b-7ed2e0d3a31b",
"b6bc69f8-c77d-4070-a9ec-0d4ad7c72be2"
],
"vua": "8682807087@dashboard-aa-preprod",
"fi": "WU9AUEBGV0dXUB5QWUc=",
"reqdate": "160520250536024",
"ecreq": "PuH3d0DSVsNCH3tfu86D4iNKTOYZyyftje7GLsc84gwMcmjFifpO9Pf4v8gDZ0lN4pD7Koskq-CkrHFGRpkvh16HVVjCjmhHiQaKRGuRo1MjoxiqicJJcQP0k-MJwDYR6krtMHFr3RP_W4Trlj2aAxeoucAvoJhGI1Lm5fnsCnnU64BHl7vPHGyXovHZIXl4sr8_HLQPuBkgLUy5oeu0fDDY62ajnztF40KufzuNe5MLI0Aut2_OjR-S94rdFrkbM6IseaBsPbpZnnibU8GuKL3A9idlvBDbLRNvEtgnjKy6AKGMAWQtEC1l6waJKeedhl0j4qCpNLtNBOCXb3VS5sf5kafDitfuSgpJ0pfuA-8="
}
*/
// Extract the required parameters from the consent response
final consentResponse = await yourApiCallToGetConsent();
// Now use these parameters with the SDK
final redirectInstance = await SaafeSdk.triggerRedirect(
context,
SaafeRedirectOptions(
fi: consentResponse['fi'], // Use the 'fi' value from consent response
reqdate: consentResponse['reqdate'], // Use the 'reqdate' value from consent response
ecreq: consentResponse['ecreq'], // Use the 'ecreq' value from consent response
theme: 'light', // Optional: 'light', 'dark', or null for system default
onComplete: (data) {
print('Flow completed: $data');
// Handle successful completion
},
onCancel: () {
print('Flow cancelled by user');
// Handle user cancellation
},
onError: (error) {
print('Error during flow: $error');
// Handle errors
},
onLoad: () {
print('WebView loaded successfully');
// Optional: handle WebView load event
},
),
);
Close the Redirect Flow #
You can programmatically close the flow:
// This will show a confirmation dialog before closing
redirectInstance.close();
URL Parameters #
The SDK automatically adds the following parameters to the redirect URL:
Platform Detection #
platform=ios- For iOS devicesplatform=android- For Android devicesplatform=flutter- For other Flutter platforms
Theme Support #
theme=light- Light themetheme=dark- Dark theme
External URL Handling #
The SDK intelligently handles external URLs by:
- Detecting external links in the WebView
- Automatically opening them in the system's default browser
- Providing multiple fallback mechanisms if the default method fails
- Showing a useful error dialog with copy functionality if all launch attempts fail
You can also use the URL launcher directly in your app:
// Launch a URL in the external browser
await SaafeSdk.launchExternalUrl(
'https://example.com',
context: context, // Optional: provide context to show error dialog if needed
);
Example #
See the example folder for a complete implementation example.
License #
This project is licensed under the MIT License - see the LICENSE file for details.