eimzo_flutter 1.0.0
eimzo_flutter: ^1.0.0 copied to clipboard
Flutter plugin wrapping the official E-IMZO Mobile SDK for Uzbekistan electronic signatures. Supports PFX/QR/NFC ID-card/USB token signing and eimzo:// deep links.
example/lib/main.dart
import 'package:eimzo_flutter/eimzo_flutter.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'E-IMZO Demo',
theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.indigo),
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final _eimzo = EimzoFlutter.instance;
bool? _allowed;
String? _initialLink;
final List<String> _links = [];
@override
void initState() {
super.initState();
_bootstrap();
_eimzo.onNewDeeplink().listen((link) {
setState(() => _links.insert(0, link));
});
}
Future<void> _bootstrap() async {
final link = await _eimzo.getInitialDeeplink();
if (link != null) setState(() => _initialLink = link);
try {
final allowed = await _eimzo.init(
config: const EimzoConfig(isTestMode: kDebugMode),
);
setState(() => _allowed = allowed);
} on EimzoException catch (e) {
setState(() => _allowed = false);
debugPrint('init failed: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('E-IMZO Flutter')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
child: Padding(
padding: const EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('License: ${_allowed == null ? "checking…" : (_allowed! ? "ALLOWED" : "BLOCKED")}'),
if (_initialLink != null)
Text('Initial link: $_initialLink',
maxLines: 2, overflow: TextOverflow.ellipsis),
],
),
),
),
const SizedBox(height: 12),
const Text('Incoming deep links:'),
Expanded(
child: _links.isEmpty
? const Center(child: Text('—'))
: ListView.builder(
itemCount: _links.length,
itemBuilder: (_, i) => ListTile(
dense: true,
leading: const Icon(Icons.link, size: 18),
title: Text(_links[i],
style: const TextStyle(fontSize: 12)),
),
),
),
],
),
),
);
}
}