qr & barcode scanner improvement.

main_production_upgrade
Sikander Saleem 1 week ago
parent b94d5d1fbd
commit e87346e5b3

@ -1,3 +1,4 @@
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
dev.steenbakker.mobile_scanner.useUnbundled=true

@ -1,7 +1,9 @@
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
@ -34,34 +36,38 @@ class AssetScanQr extends StatefulWidget {
class _AssetScanQrState extends State<AssetScanQr> { class _AssetScanQrState extends State<AssetScanQr> {
// Barcode result; // Barcode result;
QRViewController? _controller; // QRViewController? _controller;
bool _scanDone = false; bool _scanDone = false;
bool _scanning = false; bool _scanning = false;
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner'); final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner');
late AssetProvider _devicesProvider; late AssetProvider _devicesProvider;
// In order to get hot reload to work we need to pause the camera if the platform MobileScannerController? controller;
// is android, or resume the camera if the platform is iOS.
@override @override
void reassemble() { void initState() {
super.reassemble(); // TODO: implement initState
if (Platform.isAndroid) { super.initState();
_controller?.pauseCamera(); controller = MobileScannerController(
} else if (Platform.isIOS) { detectionSpeed: DetectionSpeed.noDuplicates,
_controller?.resumeCamera(); formats: [],
} returnImage: false,
torchEnabled: false,
invertImage: false,
autoZoom: true,
);
} }
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
_controller?.dispose(); controller?.dispose();
_devicesProvider.searchReset(); _devicesProvider.searchReset();
} }
_pickManually() async { _pickManually() async {
_controller?.pauseCamera(); controller?.pause();
await Navigator.push(context, MaterialPageRoute(builder: (context) => SearchDevicePage(multiSelection: widget.multiSelection))).then((value) => _controller?.resumeCamera()); await Navigator.push(context, MaterialPageRoute(builder: (context) => SearchDevicePage(multiSelection: widget.multiSelection))).then((value) => controller?.stop());
} }
_getDevice(String result, {bool isQr = false}) async { _getDevice(String result, {bool isQr = false}) async {
@ -82,27 +88,25 @@ class _AssetScanQrState extends State<AssetScanQr> {
children: [ children: [
Stack( Stack(
children: [ children: [
QRView( MobileScanner(
key: qrKey, key: qrKey,
onQRViewCreated: (QRViewController controller) { tapToFocus: true,
setState(() { controller: controller,
_controller = controller; onDetect: (result) async {
}); String? scanData = result.barcodes.first.rawValue;
controller.scannedDataStream.listen((scanData) async {
if (!_scanDone) { if (!_scanDone) {
_scanDone = true; _scanDone = true;
if (!widget.enablePickManually) { if (!widget.enablePickManually) {
if (scanData.code != null) { if (scanData != null) {
Navigator.of(context).pop(Asset(assetNumber: scanData.code!)); Navigator.of(context).pop(Asset(assetNumber: scanData));
} else { } else {
_scanDone = false; _scanDone = false;
} }
} else { } else {
_controller?.pauseCamera();
setState(() { setState(() {
_scanning = true; _scanning = true;
}); });
final result = await _getDevice(scanData.code!, isQr: true); final result = await _getDevice(scanData!, isQr: true);
setState(() { setState(() {
_scanning = false; _scanning = false;
}); });
@ -114,14 +118,53 @@ class _AssetScanQrState extends State<AssetScanQr> {
} }
} else { } else {
Utils.showToast("No Item Found. Try Again", toastGravity: ToastGravity.CENTER); Utils.showToast("No Item Found. Try Again", toastGravity: ToastGravity.CENTER);
_controller?.resumeCamera();
_scanDone = false; _scanDone = false;
} }
} }
} }
});
}, },
), ),
// QRView(
// key: qrKey,
// onQRViewCreated: (QRViewController controller) {
// setState(() {
// _controller = controller;
// });
// controller.scannedDataStream.listen((scanData) async {
// if (!_scanDone) {
// _scanDone = true;
// if (!widget.enablePickManually) {
// if (scanData.code != null) {
// Navigator.of(context).pop(Asset(assetNumber: scanData.code!));
// } else {
// _scanDone = false;
// }
// } else {
// _controller?.pauseCamera();
// setState(() {
// _scanning = true;
// });
// final result = await _getDevice(scanData.code!, isQr: true);
// setState(() {
// _scanning = false;
// });
// if (result.isNotEmpty) {
// if (widget.multiSelection) {
// Navigator.of(context).pop(<Asset>[result[0]]);
// } else {
// Navigator.of(context).pop(result[0]);
// }
// } else {
// Utils.showToast("No Item Found. Try Again", toastGravity: ToastGravity.CENTER);
// _controller?.resumeCamera();
// _scanDone = false;
// }
// }
// }
// });
// },
// ),
Center( Center(
child: 'scan'.toSvgAsset( child: 'scan'.toSvgAsset(
height: 283.toScreenHeight.toInt(), height: 283.toScreenHeight.toInt(),

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart';
import '../buttons/app_icon_button.dart'; import '../buttons/app_icon_button.dart';
@ -14,7 +15,10 @@ class ScanQr extends StatefulWidget {
class _ScanQrState extends State<ScanQr> { class _ScanQrState extends State<ScanQr> {
// Barcode result; // Barcode result;
QRViewController? _controller; // QRViewController? _controller;
MobileScannerController? controller;
bool _scanDone = false; bool _scanDone = false;
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner'); final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner');
@ -22,19 +26,34 @@ class _ScanQrState extends State<ScanQr> {
// is android, or resume the camera if the platform is iOS. // is android, or resume the camera if the platform is iOS.
@override @override
void reassemble() { void initState() {
super.reassemble(); // TODO: implement initState
if (Platform.isAndroid) { super.initState();
_controller?.pauseCamera(); controller = MobileScannerController(
} else if (Platform.isIOS) { detectionSpeed: DetectionSpeed.noDuplicates,
_controller?.resumeCamera(); formats: [],
} returnImage: false,
torchEnabled: false,
invertImage: false,
autoZoom: true,
);
} }
//
// @override
// void reassemble() {
// super.reassemble();
// if (Platform.isAndroid) {
// controller?.pauseCamera();
// } else if (Platform.isIOS) {
// _controller?.resumeCamera();
// }
// }
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
_controller?.dispose(); // _controller?.dispose();
} }
@override @override
@ -42,20 +61,15 @@ class _ScanQrState extends State<ScanQr> {
return Scaffold( return Scaffold(
body: Stack( body: Stack(
children: [ children: [
QRView( MobileScanner(
key: qrKey, tapToFocus: true,
onQRViewCreated: (QRViewController controller) { controller: controller,
setState(() { onDetect: (result) {
_controller = controller;
});
controller.scannedDataStream.listen((scanData) {
if (!_scanDone) { if (!_scanDone) {
_scanDone = true; _scanDone = true;
Navigator.of(context).pop(scanData.code); Navigator.of(context).pop(result.barcodes.first.rawValue);
} }
});
}, },
overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: 280),
), ),
SafeArea( SafeArea(
child: Padding( child: Padding(

@ -62,6 +62,7 @@ dependencies:
another_flushbar: ^1.12.32 another_flushbar: ^1.12.32
pinput: ^6.0.2 pinput: ^6.0.2
audioplayers: ^6.6.0 audioplayers: ^6.6.0
mobile_scanner: ^7.2.0
flare_flutter: flare_flutter:
git: git:

Loading…
Cancel
Save