2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-06-12 18:25:26 +00:00

Scanner wedge mode (#437)

* Add code_scan_listener package

* Implement wedge controller widget

* Update barcode settings widget

- Allow user to choose which barcode scanner to use

* Fix typo

* Select barcode scanner widget based on user preference

* Fix rendering issues for wedge controller

* Update release notes

* Add unit test for wedge scanner widget

- Required some tweaks to other code

* Use better library

- https://github.com/fuadreza/flutter_barcode_listener
- Fork of https://github.com/shaxxx/flutter_barcode_listener
- Properly handles key "case" issues (shift, essentially)
- Verified that it works correctly for multiple character types

* Local copy of code, rather than relying on package which is not available on pub.dev

* Fix unit test
This commit is contained in:
Oliver
2023-10-25 22:40:49 +11:00
committed by GitHub
parent b6ab9d5da5
commit c641cea369
12 changed files with 411 additions and 4 deletions

View File

@ -1,7 +1,9 @@
import "package:flutter/material.dart";
import "package:font_awesome_flutter/font_awesome_flutter.dart";
import "package:inventree/l10.dart";
import "package:inventree/preferences.dart";
import "package:inventree/widget/dialogs.dart";
class InvenTreeBarcodeSettingsWidget extends StatefulWidget {
@ -15,6 +17,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge
_InvenTreeBarcodeSettingsState();
int barcodeScanDelay = 500;
int barcodeScanType = BARCODE_CONTROLLER_CAMERA;
final TextEditingController _barcodeScanDelayController = TextEditingController();
@ -26,6 +29,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge
Future<void> loadSettings() async {
barcodeScanDelay = await InvenTreeSettingsManager().getValue(INV_BARCODE_SCAN_DELAY, 500) as int;
barcodeScanType = await InvenTreeSettingsManager().getValue(INV_BARCODE_SCAN_TYPE, BARCODE_CONTROLLER_CAMERA) as int;
if (mounted) {
setState(() {
@ -89,11 +93,55 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge
@override
Widget build(BuildContext context) {
// Construct an icon for the barcode scanner input
Widget? barcodeInputIcon;
switch (barcodeScanType) {
case BARCODE_CONTROLLER_WEDGE:
barcodeInputIcon = Icon(Icons.barcode_reader);
break;
case BARCODE_CONTROLLER_CAMERA:
default:
barcodeInputIcon = FaIcon(FontAwesomeIcons.camera);
break;
}
return Scaffold(
appBar: AppBar(title: Text(L10().barcodes)),
body: Container(
child: ListView(
children: [
ListTile(
title: Text(L10().barcodeScanController),
subtitle: Text(L10().barcodeScanControllerDetail),
leading: Icon(Icons.qr_code_scanner),
trailing: barcodeInputIcon,
onTap: () async {
choiceDialog(
L10().barcodeScanController,
[
ListTile(
title: Text(L10().cameraInternal),
subtitle: Text(L10().cameraInternalDetail),
leading: FaIcon(FontAwesomeIcons.camera),
),
ListTile(
title: Text(L10().scannerExternal),
subtitle: Text(L10().scannerExternalDetail),
leading: Icon(Icons.barcode_reader),
)
],
onSelected: (idx) async {
barcodeScanType = idx as int;
InvenTreeSettingsManager().setValue(INV_BARCODE_SCAN_TYPE, barcodeScanType);
if (mounted) {
setState(() {});
}
}
);
}
),
ListTile(
title: Text(L10().barcodeScanDelay),
subtitle: Text(L10().barcodeScanDelayDetail),
@ -104,7 +152,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge
_editBarcodeScanDelay(context);
},
),
)
),
],
)
)