Flutter Demo App
This example demonstrates a basic integration of attestid_sdk into a Flutter application.
It includes:
- SDK initialization
- Backend token retrieval
- Verification flow
- Result handling
Use this project as a reference alongside the Flutter SDK integration guide.
Requirements
| Tool | Minimum version |
|---|---|
| Flutter | 3.22.0 |
| Dart | 3.4.0 |
| Android | API 24 (Android 7.0) |
flutter doctor
App code
import 'dart:convert';
import 'package:attestid_sdk/attestid.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:http/http.dart' as http;
Future<void> main() async {
await dotenv.load(fileName: '.env');
await AttestIDApp.run(
apiUrl: dotenv.env['ATTESTID_API_URL'] ?? '',
getSdkToken: (userId) async {
final res = await http.post(
Uri.parse('${dotenv.env['MY_BACKEND_URL']}/attestid-session'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'userId': userId}),
);
return SdkSessionResponse.fromJson(jsonDecode(res.body) as Map<String, dynamic>);
},
sandbox: true,
);
}
AttestIDApp.run() initializes the SDK and displays the default verification interface.
Applications that require custom navigation or UI can integrate the lower-level widgets described in the Flutter SDK guide.
Example backend implementation
The following example demonstrates a minimal Node.js implementation that exchanges API credentials for an SDK token.
Use the same authentication flow in your production backend.
// server/attestid-session-proxy.js
const http = require('http');
const https = require('https');
const { URL } = require('url');
const ATTESTID_API_URL = process.env.ATTESTID_API_URL || 'http://localhost:8000';
const ATTESTID_API_KEY = process.env.ATTESTID_API_KEY || '';
const ATTESTID_ACCESS_KEY_ID = process.env.ATTESTID_ACCESS_KEY_ID || '';
const PORT = Number(process.env.PORT || 8080);
const server = http.createServer((req, res) => {
if (req.method !== 'POST' || req.url !== '/attestid-session') {
res.writeHead(404).end('Not found');
return;
}
let body = '';
req.on('data', (chunk) => { body += chunk; });
req.on('end', () => {
const { userId } = JSON.parse(body || '{}');
const target = new URL('/v1/kyc/session', ATTESTID_API_URL);
const client = target.protocol === 'https:' ? https : http;
const payload = JSON.stringify({ user_id: userId });
const upstream = client.request(
target,
{
method: 'POST',
headers: {
'API-Key': ATTESTID_API_KEY,
'Access-Key-Id': ATTESTID_ACCESS_KEY_ID,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(payload),
},
},
(upstreamRes) => {
res.writeHead(upstreamRes.statusCode, { 'Content-Type': 'application/json' });
upstreamRes.pipe(res);
},
);
upstream.write(payload);
upstream.end();
});
});
server.listen(PORT, () => console.log(`listening on http://localhost:${PORT}`));
Environment variables
Flutter application
ATTESTID_API_URL=https://api.attestid.io
MY_BACKEND_URL=http://localhost:8080
**Backend:
```env
ATTESTID_API_URL=https://api.attestid.io
ATTESTID_ACCESS_KEY_ID=ak_live_your_access_key_id_here
ATTESTID_API_KEY=sk_live_your_key_here
Get these credentials by registering your company firstsee Creating a Company & Getting Your Keys.
Running
Running on Android
A physical Android device is recommended when testing document capture and face liveness.
adb reverse tcp:8000 tcp:8000
flutter run
adb reverse maps localhost:8000 on the device to your development machine, so http://localhost:8000 in .env works without any IP changes. If you skip the port forward, use your machine's LAN IP instead (e.g. http://192.168.1.x:8000).
Android emulator
flutter emulators
flutter emulators --launch <emulator_id>
flutter run # use http://10.0.2.2:8000 for a local backend, not localhost
Configure the emulator to use a physical webcam for the front camera and back camera.
Document capture works with the default camera configuration. Face liveness requires a live camera feed.
iOS Simulator
open -a Simulator
flutter run -d ios
The iOS Simulator does not support the camerause a physical iPhone for camera and liveness testing.
Chrome (web)
flutter run -d chrome
Building for production
flutter build apk --release # Android APK
flutter build appbundle --release # Android App Bundle (Play Store)
flutter build ios --release # iOS (requires macOS + Xcode)
flutter build web # Web
Integration checklist
- SDK initializes successfully.
- SDK token retrieval completes successfully.
- Document capture completes.
- Face liveness completes.
- Verification results are returned.
- Backend implements
/attestid-session.