@@ -5,6 +5,7 @@ import 'package:simple_barcode_scanner/enum.dart';
55import 'package:simple_barcode_scanner/screens/window.dart' ;
66
77import '../barcode_appbar.dart' ;
8+ import '../constant.dart' ;
89import '../flutter_barcode_scanner.dart' ;
910
1011/// Barcode scanner for mobile and desktop devices
@@ -19,20 +20,20 @@ class BarcodeScanner extends StatelessWidget {
1920 final Widget ? child;
2021 final BarcodeAppBar ? barcodeAppBar;
2122 final int ? delayMillis;
22-
23- const BarcodeScanner ({
24- super .key,
25- required this .lineColor,
26- required this .cancelButtonText,
27- required this .isShowFlashIcon,
28- required this .scanType,
29- required this .onScanned,
30- this .child,
31- this .appBarTitle,
32- this .centerTitle,
33- this .barcodeAppBar,
34- this .delayMillis,
35- });
23+ final Function ? onClose;
24+ const BarcodeScanner (
25+ { super .key,
26+ required this .lineColor,
27+ required this .cancelButtonText,
28+ required this .isShowFlashIcon,
29+ required this .scanType,
30+ required this .onScanned,
31+ this .child,
32+ this .appBarTitle,
33+ this .centerTitle,
34+ this .barcodeAppBar,
35+ this .delayMillis,
36+ this .onClose });
3637
3738 @override
3839 Widget build (BuildContext context) {
@@ -50,7 +51,24 @@ class BarcodeScanner extends StatelessWidget {
5051 );
5152 } else {
5253 /// Scan Android and ios barcode scanner with flutter_barcode_scanner
53- _scanBarcodeForMobileAndTabDevices ();
54+ /// If onClose is not null then stream barcode otherwise scan barcode
55+ /// Scan barcode for mobile devices
56+ ScanMode scanMode;
57+ switch (scanType) {
58+ case ScanType .barcode:
59+ scanMode = ScanMode .BARCODE ;
60+ break ;
61+ case ScanType .qr:
62+ scanMode = ScanMode .QR ;
63+ break ;
64+ default :
65+ scanMode = ScanMode .DEFAULT ;
66+ break ;
67+ }
68+ onClose != null
69+ ? _streamBarcodeForMobileAndTabDevices (scanMode)
70+ : _scanBarcodeForMobileAndTabDevices (scanMode);
71+
5472 return const Scaffold (
5573 body: Center (
5674 child: CircularProgressIndicator (),
@@ -59,22 +77,19 @@ class BarcodeScanner extends StatelessWidget {
5977 }
6078 }
6179
62- _scanBarcodeForMobileAndTabDevices () async {
63- /// Scan barcode for mobile devices
64- ScanMode scanMode;
65- switch (scanType) {
66- case ScanType .barcode:
67- scanMode = ScanMode .BARCODE ;
68- break ;
69- case ScanType .qr:
70- scanMode = ScanMode .QR ;
71- break ;
72- default :
73- scanMode = ScanMode .DEFAULT ;
74- break ;
75- }
80+ _scanBarcodeForMobileAndTabDevices (ScanMode scanMode) async {
7681 String barcode = await FlutterBarcodeScanner .scanBarcode (
7782 lineColor, cancelButtonText, isShowFlashIcon, scanMode, delayMillis);
7883 onScanned (barcode);
7984 }
85+
86+ void _streamBarcodeForMobileAndTabDevices (ScanMode scanMode) {
87+ FlutterBarcodeScanner .getBarcodeStreamReceiver (
88+ lineColor, cancelButtonText, isShowFlashIcon, scanMode, delayMillis)
89+ ? .listen ((barcode) {
90+ if (barcode != null ) {
91+ barcode == kCancelValue ? onClose? .call () : onScanned (barcode);
92+ }
93+ });
94+ }
8095}
0 commit comments