Navaron Bracke

implement torch state in ZXing barcode reader

... ... @@ -5,9 +5,11 @@ import 'dart:ui';
import 'package:js/js.dart';
import 'package:mobile_scanner/src/enums/barcode_format.dart';
import 'package:mobile_scanner/src/enums/camera_facing.dart';
import 'package:mobile_scanner/src/enums/torch_state.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';
import 'package:mobile_scanner/src/web/flashlight_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:web/web.dart' as web;
... ... @@ -16,6 +18,9 @@ import 'package:web/web.dart' as web;
final class ZXingBarcodeReader extends BarcodeReader {
ZXingBarcodeReader();
/// The internal flashlight delegate.
final FlashlightDelegate _flashlightDelegate = const FlashlightDelegate();
/// The internal barcode reader.
ZXingBrowserMultiFormatReader? _reader;
... ... @@ -164,6 +169,34 @@ final class ZXingBarcodeReader extends BarcodeReader {
}
@override
Future<bool> hasTorch() {
final web.MediaStream? mediaStream = _reader?.stream;
if (mediaStream == null) {
return Future<bool>.value(false);
}
return _flashlightDelegate.hasFlashlight(mediaStream);
}
@override
Future<void> setTorchState(TorchState value) {
switch (value) {
case TorchState.unavailable:
return Future<void>.value();
case TorchState.off:
case TorchState.on:
final web.MediaStream? mediaStream = _reader?.stream;
if (mediaStream == null) {
return Future<void>.value();
}
return _flashlightDelegate.setFlashlightState(mediaStream, value);
}
}
@override
Future<void> start(StartOptions options, {required web.HTMLElement containerElement}) async {
final int detectionTimeoutMs = options.detectionTimeoutMs;
final List<BarcodeFormat> formats = options.formats;
... ...