Kullanım
Temel Örnek
import 'package:flutter/material.dart';
import 'package:trustchex_flutter_sdk/trustchex_flutter_sdk.dart';
class VerificationScreen extends StatelessWidget {
final String sessionId;
final String baseUrl;
const VerificationScreen({
super.key,
required this.sessionId,
required this.baseUrl,
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Doğrulama')),
body: TrustchexView(
sessionId: sessionId,
baseUrl: baseUrl,
onCompleted: () {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Doğrulama başarıyla tamamlandı!'),
backgroundColor: Colors.green,
),
);
},
onError: (error) {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Doğrulama hatası: $error'),
backgroundColor: Colors.red,
),
);
},
),
);
}
}
Özellikler
| Özellik | Tip | Zorunlu | Açıklama |
|---|---|---|---|
baseUrl | String | ✅ | API temel URL'si |
sessionId | String | ❌ | Oturum tanımlayıcısı |
branding | TrustchexBranding | ❌ | Renkler ve logo |
locale | TrustchexLocale | ❌ | Dil (en, tr) |
onCompleted | VoidCallback | ❌ | Doğrulama süreci tamamlandığında çağrılır |
onError | Function(String) | ❌ | Hata geri çağırma |
onDocumentRead | Function(DocumentReadResult) | ❌ | Belge okunduğunda çağrılır (NFC veya OCR) |
skipNfcResultScreen | bool | ❌ | Başarılı NFC okumasının ardından belge inceleme ekranını atlayarak otomatik olarak devam eder. Varsayılan: false |
skipSuccessScreen | bool | ❌ | Süreç tamamlandığında son başarı ekranını atlar ve onCompleted'ı anında çağırır. Varsayılan: false |
Belge Okuma Olayı
onDocumentRead geri çağırması, belge verisi mevcut olur olmaz tetiklenir — başarılı bir NFC çip okumasından veya başarılı bir kamera OCR taramasından hemen sonra. Kaynaktan bağımsız olarak birleşik bir DocumentReadResult nesnesi alır.
import 'package:trustchex_flutter_sdk/trustchex_flutter_sdk.dart';
TrustchexView(
baseUrl: 'https://your-api.com',
sessionId: 'session-123',
onDocumentRead: (result) {
final document = result.document;
print(document.documentType.name); // "passport" | "id"
print(document.issuingCountry); // "DEU"
print(document.nationality); // "DEU"
print(document.documentNumber); // "C01X00T478"
print(document.personalNumber); // "8512310074" | null
print(document.lastName); // "MÜLLER"
print(document.firstName); // "JÜRGEN KARL"
print(document.sex.name); // "male" | "female" | "unspecified" | "unknown"
print(document.dateOfBirth); // "1985-03-10" (ISO 8601)
print(document.dateOfExpiry); // "2030-11-05" (ISO 8601)
},
onCompleted: () => print('Done'),
onError: (error) => print('Error: $error'),
)
DocumentReadResult
class DocumentReadResult {
final DocumentData document;
final DocumentName name;
final DocumentFaceImage? face;
}
class DocumentData {
final ScannedDocumentType documentType; // .passport | .idCard
final String issuingCountry; // 3-letter ICAO code, e.g. "TUR"
final String nationality;
final String documentNumber;
final String? personalNumber;
final String lastName; // En iyi ad bilgisi, örn. "MÜLLER"
final String firstName; // En iyi ad bilgisi, örn. "JÜRGEN"
final DocumentSex sex; // .male | .female | .unspecified
final String? dateOfBirth; // ISO 8601, e.g. "1990-05-15"
final String? dateOfExpiry; // ISO 8601, e.g. "2028-03-01"
}
class DocumentName {
final String rawLast; // MRZ ASCII surname
final String rawFirst; // MRZ ASCII given name
final String displayLast; // Best Unicode form
final String displayFirst; // Best Unicode form
final DocumentNameSource source; // .dg11 | .reverseTable | .raw
}
class DocumentFaceImage {
final String data; // Base64-encoded image
final String mimeType; // e.g. "image/jpeg"
}
İsim Kaynakları
| Kaynak | Açıklama |
|---|---|
dg11 | NFC çipindeki DG11 dosyasından okunan tam basılı isim (UTF-8). En yüksek doğruluk. |
reverseTable | ICAO 9303 ters transliterasyon tablosu ile yeniden oluşturuldu (ör. OE→Ö, UE→Ü). Bilinen ülkeler için uygulanır. |
raw | Dönüşüm yapılmadı — görüntülenen isim ham MRZ ASCII değeriyle aynı. |