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:
@ -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);
|
||||
},
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
)
|
||||
)
|
||||
|
Reference in New Issue
Block a user