Navaron Bracke

handle no code detected for ZXing

@@ -2,6 +2,7 @@ import 'dart:async'; @@ -2,6 +2,7 @@ import 'dart:async';
2 import 'dart:js_interop'; 2 import 'dart:js_interop';
3 import 'dart:ui'; 3 import 'dart:ui';
4 4
  5 +import 'package:flutter/foundation.dart';
5 import 'package:mobile_scanner/src/enums/barcode_format.dart'; 6 import 'package:mobile_scanner/src/enums/barcode_format.dart';
6 import 'package:mobile_scanner/src/mobile_scanner_exception.dart'; 7 import 'package:mobile_scanner/src/mobile_scanner_exception.dart';
7 import 'package:mobile_scanner/src/objects/barcode_capture.dart'; 8 import 'package:mobile_scanner/src/objects/barcode_capture.dart';
@@ -18,6 +19,11 @@ import 'package:web/web.dart' as web; @@ -18,6 +19,11 @@ import 'package:web/web.dart' as web;
18 final class ZXingBarcodeReader extends BarcodeReader { 19 final class ZXingBarcodeReader extends BarcodeReader {
19 ZXingBarcodeReader(); 20 ZXingBarcodeReader();
20 21
  22 + /// ZXing reports an error with this message if the code could not be detected.
  23 + @visibleForTesting
  24 + static const String kNoCodeDetectedErrorMessage =
  25 + 'No MultiFormat Readers were able to detect the code.';
  26 +
21 /// The listener for media track settings changes. 27 /// The listener for media track settings changes.
22 void Function(web.MediaTrackSettings)? _onMediaTrackSettingsChanged; 28 void Function(web.MediaTrackSettings)? _onMediaTrackSettingsChanged;
23 29
@@ -105,7 +111,8 @@ final class ZXingBarcodeReader extends BarcodeReader { @@ -105,7 +111,8 @@ final class ZXingBarcodeReader extends BarcodeReader {
105 return; 111 return;
106 } 112 }
107 113
108 - if (error != null) { 114 + // Skip the event if no code was detected.
  115 + if (error != null && error.message != kNoCodeDetectedErrorMessage) {
109 controller.addError(MobileScannerBarcodeException(error.message)); 116 controller.addError(MobileScannerBarcodeException(error.message));
110 return; 117 return;
111 } 118 }