Navaron Bracke

manage media stream constraints listener

... ... @@ -95,6 +95,13 @@ abstract class BarcodeReader {
await completer.future;
}
/// Set a listener for the media stream constraints.
void setMediaTrackConstraintsListener(void Function(MediaTrackConstraints) listener) {
throw UnimplementedError(
'setMediaTrackConstraintsListener() has not been implemented.',
);
}
/// Set the torch state for the active camera to the given [value].
Future<void> setTorchState(TorchState value) {
throw UnimplementedError('setTorchState() has not been implemented.');
... ...
... ... @@ -33,6 +33,9 @@ class MobileScannerWeb extends MobileScannerPlatform {
/// This container element is used by the barcode reader.
HTMLDivElement? _divElement;
/// The stream controller for the media track constraints stream.
final StreamController<MediaTrackConstraints> _constraintsController = StreamController.broadcast();
/// The view type for the platform view factory.
final String _viewType = 'MobileScannerWeb';
... ... @@ -43,6 +46,14 @@ class MobileScannerWeb extends MobileScannerPlatform {
@override
Stream<BarcodeCapture?> get barcodesStream => _barcodesController.stream;
void _handleMediaTrackConstraintsChange(MediaTrackConstraints constraints) {
if (_constraintsController.isClosed) {
return;
}
_constraintsController.add(constraints);
}
@override
Widget buildCameraView() {
if (!_barcodeReader.isScanning) {
... ... @@ -86,6 +97,9 @@ class MobileScannerWeb extends MobileScannerPlatform {
// Clear the existing barcodes.
_barcodesController.add(const BarcodeCapture());
// Listen for changes to the media track constraints.
_barcodeReader.setMediaTrackConstraintsListener(_handleMediaTrackConstraintsChange);
await _barcodeReader.start(
startOptions,
containerElement: _divElement!,
... ... @@ -170,5 +184,6 @@ class MobileScannerWeb extends MobileScannerPlatform {
await stop();
await _barcodesController.close();
await _constraintsController.close();
}
}
... ...
... ... @@ -19,7 +19,7 @@ final class ZXingBarcodeReader extends BarcodeReader {
ZXingBarcodeReader();
/// The internal media stream track constraints delegate.
final MediaTrackConstraintsDelegate _flashlightDelegate = const MediaTrackConstraintsDelegate();
final MediaTrackConstraintsDelegate _mediaTrackConstraintsDelegate = const MediaTrackConstraintsDelegate();
/// The internal barcode reader.
ZXingBrowserMultiFormatReader? _reader;
... ... @@ -180,7 +180,7 @@ final class ZXingBarcodeReader extends BarcodeReader {
return Future<bool>.value(false);
}
return _flashlightDelegate.hasFlashlight(mediaStream);
return _mediaTrackConstraintsDelegate.hasFlashlight(mediaStream);
}
@override
... ... @@ -196,7 +196,7 @@ final class ZXingBarcodeReader extends BarcodeReader {
return Future<void>.value();
}
return _flashlightDelegate.setFlashlightState(mediaStream, value);
return _mediaTrackConstraintsDelegate.setFlashlightState(mediaStream, value);
}
}
... ...