ipda_scanner 0.1.1-alpha ipda_scanner: ^0.1.1-alpha copied to clipboard
This is a plugin to scan barcodes by using IPDA PDA Android devices.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:ipda_scanner/ipda_scanner.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp>
with WidgetsBindingObserver
implements ScannerCallBack {
IPdaScanner scanner = IPdaScanner();
String scannedCode = 'Empty';
bool scannerEnabled = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
scanner.setScannerCallBack(this);
}
@override
void onDecoded(String result) {
setState(() {
scannedCode = result;
});
}
@override
void onError(Exception error) {
setState(() {
scannedCode = error.toString();
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('IPda scanner example'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Scanner: ${scannerEnabled ? "Started" : "Stopped"}',
style:
TextStyle(color: scannerEnabled ? Colors.blue : Colors.red),
),
Divider(
color: Colors.transparent,
),
Text('Scanned code: $scannedCode'),
Divider(
color: Colors.transparent,
),
ElevatedButton(
child: Text("Start Scanner"),
onPressed: () {
scanner.startScanner();
scannerEnabled = true;
setState(() {});
},
),
Divider(
color: Colors.transparent,
),
ElevatedButton(
child: Text("Stop Scanner"),
onPressed: () {
scanner.stopScanner();
scannerEnabled = false;
setState(() {});
},
),
],
),
),
);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == null) return;
switch (state) {
case AppLifecycleState.resumed:
if (scanner != null) scanner.resumeScanner();
break;
case AppLifecycleState.inactive:
if (scanner != null) scanner.pauseScanner();
break;
case AppLifecycleState
.paused: //AppLifecycleState.paused is used as stopped state because deactivate() works more as a pause for lifecycle
if (scanner != null) scanner.pauseScanner();
break;
case AppLifecycleState.detached:
if (scanner != null) scanner.pauseScanner();
break;
default:
break;
}
}
@override
void dispose() {
if (scanner != null) scanner.stopScanner();
super.dispose();
}
}