Navaron Bracke

let torch state notify that it is unsupported

... ... @@ -43,7 +43,9 @@ abstract class BarcodeReader {
/// Check whether the active camera has a flashlight.
Future<bool> hasTorch() {
throw UnimplementedError('hasTorch() has not been implemented.');
// The torch of a media stream is not available for video tracks.
// See https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#instance_properties_of_video_tracks
return Future<bool>.value(false);
}
/// Load the barcode reader library.
... ... @@ -108,7 +110,10 @@ abstract class BarcodeReader {
/// Set the torch state for the active camera to the given [value].
Future<void> setTorchState(TorchState value) {
throw UnimplementedError('setTorchState() has not been implemented.');
throw UnsupportedError(
'Setting the torch state is not supported for video tracks on the web.\n'
'See https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#instance_properties_of_video_tracks',
);
}
/// Start the barcode reader and initialize the [videoStream].
... ...
... ... @@ -77,7 +77,7 @@ class MobileScannerWeb extends MobileScannerPlatform {
@override
Stream<TorchState> get torchStateStream =>
_settingsController.stream.map((_) => TorchState.off);
_settingsController.stream.map((_) => TorchState.unavailable);
@override
Stream<double> get zoomScaleStateStream =>
... ...
... ... @@ -3,7 +3,6 @@ import 'dart:js_interop';
import 'dart:ui';
import 'package:mobile_scanner/src/enums/barcode_format.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';
... ... @@ -165,17 +164,6 @@ final class ZXingBarcodeReader extends BarcodeReader {
}
@override
Future<bool> hasTorch() {
final web.MediaStream? mediaStream = _reader?.stream;
if (mediaStream == null) {
return Future<bool>.value(false);
}
return _mediaTrackConstraintsDelegate.hasFlashlight(mediaStream);
}
@override
void setMediaTrackSettingsListener(
void Function(web.MediaTrackSettings) listener,
) {
... ... @@ -183,33 +171,6 @@ final class ZXingBarcodeReader extends BarcodeReader {
}
@override
Future<void> setTorchState(TorchState value) async {
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();
}
await _mediaTrackConstraintsDelegate.setFlashlightState(
mediaStream,
value,
);
final web.MediaTrackSettings? settings =
_mediaTrackConstraintsDelegate.getSettings(mediaStream);
if (settings != null) {
_onMediaTrackSettingsChanged?.call(settings);
}
}
}
@override
Future<void> start(
StartOptions options, {
required web.HTMLVideoElement videoElement,
... ...