Showing
3 changed files
with
31 additions
and
8 deletions
| @@ -13,6 +13,17 @@ import 'package:web/web.dart'; | @@ -13,6 +13,17 @@ import 'package:web/web.dart'; | ||
| 13 | abstract class BarcodeReader { | 13 | abstract class BarcodeReader { |
| 14 | const BarcodeReader(); | 14 | const BarcodeReader(); |
| 15 | 15 | ||
| 16 | + /// Whether the video feed is paused | ||
| 17 | + bool? get paused => | ||
| 18 | + throw UnimplementedError('paused has not been implemented.'); | ||
| 19 | + | ||
| 20 | + /// Pause the barcode reader. | ||
| 21 | + void pause() => throw UnimplementedError('pause() has not been implemented.'); | ||
| 22 | + | ||
| 23 | + /// Pause the barcode reader. | ||
| 24 | + Future<void> resume() => | ||
| 25 | + throw UnimplementedError('resume() has not been implemented.'); | ||
| 26 | + | ||
| 16 | /// Whether the scanner is currently scanning for barcodes. | 27 | /// Whether the scanner is currently scanning for barcodes. |
| 17 | bool get isScanning { | 28 | bool get isScanning { |
| 18 | throw UnimplementedError('isScanning has not been implemented.'); | 29 | throw UnimplementedError('isScanning has not been implemented.'); |
| @@ -128,11 +139,6 @@ abstract class BarcodeReader { | @@ -128,11 +139,6 @@ abstract class BarcodeReader { | ||
| 128 | throw UnimplementedError('start() has not been implemented.'); | 139 | throw UnimplementedError('start() has not been implemented.'); |
| 129 | } | 140 | } |
| 130 | 141 | ||
| 131 | - /// Pause the barcode reader. | ||
| 132 | - Future<void> pause() { | ||
| 133 | - throw UnimplementedError('pause() has not been implemented.'); | ||
| 134 | - } | ||
| 135 | - | ||
| 136 | /// Stop the barcode reader and dispose of the video stream. | 142 | /// Stop the barcode reader and dispose of the video stream. |
| 137 | Future<void> stop() { | 143 | Future<void> stop() { |
| 138 | throw UnimplementedError('stop() has not been implemented.'); | 144 | throw UnimplementedError('stop() has not been implemented.'); |
| @@ -263,6 +263,16 @@ class MobileScannerWeb extends MobileScannerPlatform { | @@ -263,6 +263,16 @@ class MobileScannerWeb extends MobileScannerPlatform { | ||
| 263 | @override | 263 | @override |
| 264 | Future<MobileScannerViewAttributes> start(StartOptions startOptions) async { | 264 | Future<MobileScannerViewAttributes> start(StartOptions startOptions) async { |
| 265 | if (_barcodeReader != null) { | 265 | if (_barcodeReader != null) { |
| 266 | + if (_barcodeReader!.paused ?? false) { | ||
| 267 | + await _barcodeReader?.resume(); | ||
| 268 | + return MobileScannerViewAttributes( | ||
| 269 | + // The torch of a media stream is not available for video tracks. | ||
| 270 | + // See https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#instance_properties_of_video_tracks | ||
| 271 | + currentTorchMode: TorchState.unavailable, | ||
| 272 | + size: _barcodeReader?.videoSize ?? Size.zero, | ||
| 273 | + ); | ||
| 274 | + } | ||
| 275 | + | ||
| 266 | throw const MobileScannerException( | 276 | throw const MobileScannerException( |
| 267 | errorCode: MobileScannerErrorCode.controllerAlreadyInitialized, | 277 | errorCode: MobileScannerErrorCode.controllerAlreadyInitialized, |
| 268 | errorDetails: MobileScannerErrorDetails( | 278 | errorDetails: MobileScannerErrorDetails( |
| @@ -365,7 +375,7 @@ class MobileScannerWeb extends MobileScannerPlatform { | @@ -365,7 +375,7 @@ class MobileScannerWeb extends MobileScannerPlatform { | ||
| 365 | @override | 375 | @override |
| 366 | Future<void> pause() async { | 376 | Future<void> pause() async { |
| 367 | _barcodesSubscription?.pause(); | 377 | _barcodesSubscription?.pause(); |
| 368 | - await _barcodeReader?.pause(); | 378 | + _barcodeReader?.pause(); |
| 369 | } | 379 | } |
| 370 | 380 | ||
| 371 | @override | 381 | @override |
| @@ -169,8 +169,15 @@ final class ZXingBarcodeReader extends BarcodeReader { | @@ -169,8 +169,15 @@ final class ZXingBarcodeReader extends BarcodeReader { | ||
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | @override | 171 | @override |
| 172 | - Future<void> pause() async { | ||
| 173 | - _reader?.videoElement?.pause(); | 172 | + bool? get paused => _reader?.videoElement?.paused; |
| 173 | + | ||
| 174 | + @override | ||
| 175 | + void pause() => _reader?.videoElement?.pause(); | ||
| 176 | + | ||
| 177 | + @override | ||
| 178 | + Future<void> resume() async { | ||
| 179 | + final result = _reader?.videoElement?.play(); | ||
| 180 | + await result?.toDart; | ||
| 174 | } | 181 | } |
| 175 | 182 | ||
| 176 | @override | 183 | @override |
-
Please register or login to post a comment