Navaron Bracke

remove old lifecycle bug workaround for web

... ... @@ -11,8 +11,7 @@ export 'src/enums/phone_type.dart';
export 'src/enums/torch_state.dart';
export 'src/mobile_scanner.dart';
export 'src/mobile_scanner_controller.dart';
export 'src/mobile_scanner_exception.dart'
hide PermissionRequestPendingException;
export 'src/mobile_scanner_exception.dart';
export 'src/mobile_scanner_platform_interface.dart';
export 'src/objects/address.dart';
export 'src/objects/barcode.dart';
... ...
... ... @@ -246,13 +246,6 @@ class MobileScannerController extends ValueNotifier<MobileScannerState> {
);
}
// Permission was denied, do nothing.
// When the controller is stopped,
// the error is reset so the permission can be requested again if possible.
if (value.error?.errorCode == MobileScannerErrorCode.permissionDenied) {
return;
}
// Do nothing if the camera is already running.
if (value.isRunning) {
return;
... ... @@ -306,8 +299,6 @@ class MobileScannerController extends ValueNotifier<MobileScannerState> {
zoomScale: 1.0,
);
}
} on PermissionRequestPendingException catch (_) {
// If a permission request was already pending, do nothing.
}
}
... ...
... ... @@ -40,13 +40,6 @@ class MobileScannerErrorDetails {
final String? message;
}
/// This class represents an exception that is thrown
/// when the scanner was (re)started while a permission request was pending.
///
/// This exception type is only used internally,
/// and is not part of the public API.
class PermissionRequestPendingException implements Exception {}
/// This class represents an exception thrown by the [MobileScannerController]
/// when a barcode scanning error occurs when processing an input frame.
class MobileScannerBarcodeException implements Exception {
... ...
... ... @@ -39,12 +39,6 @@ class MobileScannerWeb extends MobileScannerPlatform {
/// The container div element for the camera view.
late HTMLDivElement _divElement;
/// The flag that keeps track of whether a permission request is in progress.
///
/// On the web, a permission request triggers a dialog, that in turn triggers a lifecycle change.
/// While the permission request is in progress, any attempts at (re)starting the camera should be ignored.
bool _permissionRequestInProgress = false;
/// The stream controller for the media track settings stream.
///
/// Currently, only the facing mode setting can be supported,
... ... @@ -199,17 +193,12 @@ class MobileScannerWeb extends MobileScannerPlatform {
}
try {
_permissionRequestInProgress = true;
// Retrieving the media devices requests the camera permission.
final MediaStream videoStream =
await window.navigator.mediaDevices.getUserMedia(constraints).toDart;
_permissionRequestInProgress = false;
return videoStream;
} on DOMException catch (error, stackTrace) {
_permissionRequestInProgress = false;
final String errorMessage = error.toString();
MobileScannerErrorCode errorCode = MobileScannerErrorCode.genericError;
... ... @@ -272,20 +261,7 @@ class MobileScannerWeb extends MobileScannerPlatform {
@override
Future<MobileScannerViewAttributes> start(StartOptions startOptions) async {
// If the permission request has not yet completed,
// the camera view is not ready yet.
// Prevent the permission popup from triggering a restart of the scanner.
if (_permissionRequestInProgress) {
throw PermissionRequestPendingException();
}
_barcodeReader = ZXingBarcodeReader();
await _barcodeReader?.maybeLoadLibrary(
alternateScriptUrl: _alternateScriptUrl,
);
if (_barcodeReader?.isScanning ?? false) {
if (_barcodeReader != null) {
throw const MobileScannerException(
errorCode: MobileScannerErrorCode.controllerAlreadyInitialized,
errorDetails: MobileScannerErrorDetails(
... ... @@ -295,6 +271,12 @@ class MobileScannerWeb extends MobileScannerPlatform {
);
}
_barcodeReader = ZXingBarcodeReader();
await _barcodeReader?.maybeLoadLibrary(
alternateScriptUrl: _alternateScriptUrl,
);
// Request camera permissions and prepare the video stream.
final MediaStream videoStream = await _prepareVideoStream(
startOptions.cameraDirection,
... ...