Navaron Bracke

implement torch state in ZXing barcode reader

@@ -5,9 +5,11 @@ import 'dart:ui'; @@ -5,9 +5,11 @@ import 'dart:ui';
5 import 'package:js/js.dart'; 5 import 'package:js/js.dart';
6 import 'package:mobile_scanner/src/enums/barcode_format.dart'; 6 import 'package:mobile_scanner/src/enums/barcode_format.dart';
7 import 'package:mobile_scanner/src/enums/camera_facing.dart'; 7 import 'package:mobile_scanner/src/enums/camera_facing.dart';
  8 +import 'package:mobile_scanner/src/enums/torch_state.dart';
8 import 'package:mobile_scanner/src/objects/barcode_capture.dart'; 9 import 'package:mobile_scanner/src/objects/barcode_capture.dart';
9 import 'package:mobile_scanner/src/objects/start_options.dart'; 10 import 'package:mobile_scanner/src/objects/start_options.dart';
10 import 'package:mobile_scanner/src/web/barcode_reader.dart'; 11 import 'package:mobile_scanner/src/web/barcode_reader.dart';
  12 +import 'package:mobile_scanner/src/web/flashlight_delegate.dart';
11 import 'package:mobile_scanner/src/web/zxing/result.dart'; 13 import 'package:mobile_scanner/src/web/zxing/result.dart';
12 import 'package:mobile_scanner/src/web/zxing/zxing_browser_multi_format_reader.dart'; 14 import 'package:mobile_scanner/src/web/zxing/zxing_browser_multi_format_reader.dart';
13 import 'package:web/web.dart' as web; 15 import 'package:web/web.dart' as web;
@@ -16,6 +18,9 @@ import 'package:web/web.dart' as web; @@ -16,6 +18,9 @@ import 'package:web/web.dart' as web;
16 final class ZXingBarcodeReader extends BarcodeReader { 18 final class ZXingBarcodeReader extends BarcodeReader {
17 ZXingBarcodeReader(); 19 ZXingBarcodeReader();
18 20
  21 + /// The internal flashlight delegate.
  22 + final FlashlightDelegate _flashlightDelegate = const FlashlightDelegate();
  23 +
19 /// The internal barcode reader. 24 /// The internal barcode reader.
20 ZXingBrowserMultiFormatReader? _reader; 25 ZXingBrowserMultiFormatReader? _reader;
21 26
@@ -164,6 +169,34 @@ final class ZXingBarcodeReader extends BarcodeReader { @@ -164,6 +169,34 @@ final class ZXingBarcodeReader extends BarcodeReader {
164 } 169 }
165 170
166 @override 171 @override
  172 + Future<bool> hasTorch() {
  173 + final web.MediaStream? mediaStream = _reader?.stream;
  174 +
  175 + if (mediaStream == null) {
  176 + return Future<bool>.value(false);
  177 + }
  178 +
  179 + return _flashlightDelegate.hasFlashlight(mediaStream);
  180 + }
  181 +
  182 + @override
  183 + Future<void> setTorchState(TorchState value) {
  184 + switch (value) {
  185 + case TorchState.unavailable:
  186 + return Future<void>.value();
  187 + case TorchState.off:
  188 + case TorchState.on:
  189 + final web.MediaStream? mediaStream = _reader?.stream;
  190 +
  191 + if (mediaStream == null) {
  192 + return Future<void>.value();
  193 + }
  194 +
  195 + return _flashlightDelegate.setFlashlightState(mediaStream, value);
  196 + }
  197 + }
  198 +
  199 + @override
167 Future<void> start(StartOptions options, {required web.HTMLElement containerElement}) async { 200 Future<void> start(StartOptions options, {required web.HTMLElement containerElement}) async {
168 final int detectionTimeoutMs = options.detectionTimeoutMs; 201 final int detectionTimeoutMs = options.detectionTimeoutMs;
169 final List<BarcodeFormat> formats = options.formats; 202 final List<BarcodeFormat> formats = options.formats;