JakubPatrik

expose the binaryData from the jsQR library

... ... @@ -200,7 +200,11 @@ class MobileScannerWebPlugin {
final code = jsQR(imgData.data, canvas.width, canvas.height);
if (code != null) {
controller.add({'name': 'barcodeWeb', 'data': code.data});
controller.add({
'name': 'barcodeWeb',
'data': code.data,
'binaryData': code.binaryData,
});
}
}
}
... ...
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
... ... @@ -89,6 +90,7 @@ class MobileScannerController {
void handleEvent(Map event) {
final name = event['name'];
final data = event['data'];
final binaryData = event['binaryData'];
switch (name) {
case 'torchState':
final state = TorchState.values[data as int? ?? 0];
... ... @@ -106,7 +108,11 @@ class MobileScannerController {
);
break;
case 'barcodeWeb':
barcodesController.add(Barcode(rawValue: data as String?));
final bytes = (binaryData as List).cast<int>();
barcodesController.add(Barcode(
rawValue: data as String?,
rawBytes: Uint8List.fromList(bytes),
));
break;
default:
throw UnimplementedError();
... ...
@JS()
library jsqr;
import 'dart:typed_data';
import 'package:js/js.dart';
@JS('jsQR')
... ... @@ -9,4 +11,6 @@ external Code? jsQR(dynamic data, int? width, int? height);
@JS()
class Code {
external String get data;
external Uint8ClampedList get binaryData;
}
... ...