scansdk 1.4.0
scansdk: ^1.4.0 copied to clipboard
OVD KINEGRAM ScanSDK for Flutter: scan barcodes, MRZ, driver licenses, number plates and ICAO Visible Digital Seals in your mobile apps.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:scansdk/scansdk.dart';
void main() {
runApp(const ScanSdkExampleApp());
}
class ScanSdkExampleApp extends StatefulWidget {
const ScanSdkExampleApp({super.key});
@override
State<ScanSdkExampleApp> createState() => _ScanSdkExampleAppState();
}
class _ScanSdkExampleAppState extends State<ScanSdkExampleApp> {
final ScanSDK _scanSdk = ScanSDK();
final List<ScanSdkResult> _results = <ScanSdkResult>[];
String? _errorMessage;
bool _isOpeningScanner = false;
Future<void> _openScanner() async {
if (_isOpeningScanner) {
return;
}
setState(() {
_errorMessage = null;
_isOpeningScanner = true;
});
try {
final List<ScanSdkResult> results = await _scanSdk.openScanner();
if (!mounted) return;
setState(() {
_results
..clear()
..addAll(results);
});
} on PlatformException catch (error) {
if (!mounted) return;
setState(() => _errorMessage = error.message ?? error.code);
} catch (error) {
if (!mounted) return;
setState(() => _errorMessage = error.toString());
} finally {
if (!mounted) return;
setState(() => _isOpeningScanner = false);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('ScanSDK Flutter Example'),
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Column(
children: [
const Text(
'Tap the button to launch the scanner.',
textAlign: TextAlign.center,
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isOpeningScanner ? null : _openScanner,
child: Text(_isOpeningScanner ? 'Opening…' : 'Open Scanner'),
),
if (_errorMessage != null) ...[
const SizedBox(height: 16),
Text(
_errorMessage!,
style: const TextStyle(color: Colors.red),
textAlign: TextAlign.center,
),
],
const SizedBox(height: 16),
Expanded(child: _buildResults()),
],
),
),
),
);
}
Widget _buildResults() {
if (_results.isEmpty) {
return const Center(
child: Text(
'No scan results yet. The latest scan will appear here.',
textAlign: TextAlign.center,
),
);
}
return ListView.separated(
itemCount: _results.length,
separatorBuilder: (_, __) => const SizedBox(height: 12),
itemBuilder: (BuildContext context, int index) {
final ScanSdkResult result = _results[index];
return Card(
child: Padding(
padding: const EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
result.type,
style: Theme.of(context).textTheme.titleMedium,
),
const SizedBox(height: 8),
Text(
result.message,
style: Theme.of(context).textTheme.bodyMedium,
),
],
),
),
);
},
);
}
}