Navaron Bracke

forward errors from ZXing

... ... @@ -322,6 +322,15 @@ class MobileScannerWeb extends MobileScannerPlatform {
_barcodesController.add(barcode);
},
onError: (Object error) {
if (_barcodesController.isClosed) {
return;
}
_barcodesController.addError(error);
},
// Errors are handled gracefully by forwarding them.
cancelOnError: false,
);
final bool hasTorch = await _barcodeReader?.hasTorch() ?? false;
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:js_interop';
import 'dart:ui';
import 'package:mobile_scanner/src/enums/barcode_format.dart';
import 'package:mobile_scanner/src/mobile_scanner_exception.dart';
import 'package:mobile_scanner/src/objects/barcode_capture.dart';
import 'package:mobile_scanner/src/objects/start_options.dart';
import 'package:mobile_scanner/src/web/barcode_reader.dart';
... ... @@ -10,6 +11,7 @@ import 'package:mobile_scanner/src/web/javascript_map.dart';
import 'package:mobile_scanner/src/web/media_track_constraints_delegate.dart';
import 'package:mobile_scanner/src/web/zxing/result.dart';
import 'package:mobile_scanner/src/web/zxing/zxing_browser_multi_format_reader.dart';
import 'package:mobile_scanner/src/web/zxing/zxing_exception.dart';
import 'package:web/web.dart' as web;
/// A barcode reader implementation that uses the ZXing library.
... ... @@ -98,16 +100,23 @@ final class ZXingBarcodeReader extends BarcodeReader {
_reader?.decodeContinuously.callAsFunction(
_reader,
_reader?.videoElement,
(Result? result, JSAny? error) {
if (controller.isClosed || result == null) {
(Result? result, ZXingException? error) {
if (controller.isClosed) {
return;
}
if (error != null) {
controller.addError(MobileScannerBarcodeException(error.message));
return;
}
if (result != null) {
controller.add(
BarcodeCapture(
barcodes: [result.toBarcode],
),
);
}
}.toJS,
);
};
... ...
import 'dart:js_interop';
/// The JS static interop class for the Result class in the ZXing library.
///
/// See also: https://github.com/zxing-js/library/blob/master/src/core/Exception.ts
@JS('ZXing.Exception')
extension type ZXingException._(JSObject _) implements JSObject {
/// The error message of the exception, if any.
external String? get message;
}
... ...