From ff82ed105d37dc05203b74ab505880fbb27dad62 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 11 Dec 2024 13:12:30 +1100 Subject: [PATCH] Fix recreation of scanned data - Ensure RS and GS characters are correctly observed --- lib/barcode/camera_controller.dart | 31 +++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index 2e40ef48..fb88a626 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -1,4 +1,6 @@ import "dart:math"; +import "dart:typed_data"; + import "package:flutter/material.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; @@ -93,17 +95,36 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { return; } - String barcode_data = code?.text ?? ""; + Uint8List raw_data = code?.rawBytes ?? Uint8List(0); + + // Reconstruct barcode from raw data + String barcode; + + if (raw_data.isNotEmpty) { + barcode = ""; + + final buffer = StringBuffer(); + + for (int i = 0; i < raw_data.length; i++) { + buffer.writeCharCode(raw_data[i]); + } + + barcode = buffer.toString(); + + } else { + barcode = code?.text ?? ""; + } if (mounted) { setState(() { - scanned_code = barcode_data; - scanning_paused = barcode_data.isNotEmpty; + scanned_code = barcode; + scanning_paused = barcode.isNotEmpty; }); } - if (barcode_data.isNotEmpty) { - handleBarcodeData(barcode_data).then((_) { + if (barcode.isNotEmpty) { + + handleBarcodeData(barcode).then((_) { if (!single_scanning && mounted) { // Resume next scan setState(() {