Skip to content

Commit 18da618

Browse files
bug: fix pause and resume not working on web
1 parent bafacb5 commit 18da618

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

lib/src/web/barcode_reader.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ import 'package:web/web.dart';
1313
abstract class BarcodeReader {
1414
const BarcodeReader();
1515

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+
1627
/// Whether the scanner is currently scanning for barcodes.
1728
bool get isScanning {
1829
throw UnimplementedError('isScanning has not been implemented.');
@@ -128,11 +139,6 @@ abstract class BarcodeReader {
128139
throw UnimplementedError('start() has not been implemented.');
129140
}
130141

131-
/// Pause the barcode reader.
132-
Future<void> pause() {
133-
throw UnimplementedError('pause() has not been implemented.');
134-
}
135-
136142
/// Stop the barcode reader and dispose of the video stream.
137143
Future<void> stop() {
138144
throw UnimplementedError('stop() has not been implemented.');

lib/src/web/mobile_scanner_web.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,16 @@ class MobileScannerWeb extends MobileScannerPlatform {
263263
@override
264264
Future<MobileScannerViewAttributes> start(StartOptions startOptions) async {
265265
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+
266276
throw const MobileScannerException(
267277
errorCode: MobileScannerErrorCode.controllerAlreadyInitialized,
268278
errorDetails: MobileScannerErrorDetails(
@@ -365,7 +375,7 @@ class MobileScannerWeb extends MobileScannerPlatform {
365375
@override
366376
Future<void> pause() async {
367377
_barcodesSubscription?.pause();
368-
await _barcodeReader?.pause();
378+
_barcodeReader?.pause();
369379
}
370380

371381
@override

lib/src/web/zxing/zxing_barcode_reader.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,15 @@ final class ZXingBarcodeReader extends BarcodeReader {
169169
}
170170

171171
@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;
174181
}
175182

176183
@override

0 commit comments

Comments
 (0)