Showing
1 changed file
with
33 additions
and
0 deletions
| @@ -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; |
-
Please register or login to post a comment