Showing
3 changed files
with
17 additions
and
3 deletions
| 1 | import 'dart:js_interop'; | 1 | import 'dart:js_interop'; |
| 2 | 2 | ||
| 3 | +import 'package:mobile_scanner/src/web/media_track_extension.dart'; | ||
| 3 | import 'package:web/web.dart'; | 4 | import 'package:web/web.dart'; |
| 4 | 5 | ||
| 5 | /// This class represents a delegate that manages the constraints for a [MediaStreamTrack]. | 6 | /// This class represents a delegate that manages the constraints for a [MediaStreamTrack]. |
| @@ -19,8 +20,9 @@ final class MediaTrackConstraintsDelegate { | @@ -19,8 +20,9 @@ final class MediaTrackConstraintsDelegate { | ||
| 19 | 20 | ||
| 20 | final MediaTrackCapabilities capabilities = track.getCapabilities(); | 21 | final MediaTrackCapabilities capabilities = track.getCapabilities(); |
| 21 | final MediaTrackSettings settings = track.getSettings(); | 22 | final MediaTrackSettings settings = track.getSettings(); |
| 23 | + final JSArray<JSString>? facingModes = capabilities.facingModeNullable; | ||
| 22 | 24 | ||
| 23 | - if (capabilities.facingMode.toDart.isEmpty) { | 25 | + if (facingModes == null || facingModes.toDart.isEmpty) { |
| 24 | return MediaTrackSettings( | 26 | return MediaTrackSettings( |
| 25 | width: settings.width, | 27 | width: settings.width, |
| 26 | height: settings.height, | 28 | height: settings.height, |
lib/src/web/media_track_extension.dart
0 → 100644
| 1 | +import 'dart:js_interop'; | ||
| 2 | +import 'package:web/web.dart'; | ||
| 3 | + | ||
| 4 | +/// This extension provides nullable properties for [MediaTrackCapabilities], | ||
| 5 | +/// for cases where the properties are not supported by all browsers. | ||
| 6 | +extension NullableMediaTrackCapabilities on MediaTrackCapabilities { | ||
| 7 | + /// The `facingMode` property is not supported on Safari. | ||
| 8 | + @JS('facingMode') | ||
| 9 | + external JSArray<JSString>? get facingModeNullable; | ||
| 10 | +} |
| @@ -13,6 +13,7 @@ import 'package:mobile_scanner/src/mobile_scanner_view_attributes.dart'; | @@ -13,6 +13,7 @@ import 'package:mobile_scanner/src/mobile_scanner_view_attributes.dart'; | ||
| 13 | import 'package:mobile_scanner/src/objects/barcode_capture.dart'; | 13 | import 'package:mobile_scanner/src/objects/barcode_capture.dart'; |
| 14 | import 'package:mobile_scanner/src/objects/start_options.dart'; | 14 | import 'package:mobile_scanner/src/objects/start_options.dart'; |
| 15 | import 'package:mobile_scanner/src/web/barcode_reader.dart'; | 15 | import 'package:mobile_scanner/src/web/barcode_reader.dart'; |
| 16 | +import 'package:mobile_scanner/src/web/media_track_extension.dart'; | ||
| 16 | import 'package:mobile_scanner/src/web/zxing/zxing_barcode_reader.dart'; | 17 | import 'package:mobile_scanner/src/web/zxing/zxing_barcode_reader.dart'; |
| 17 | import 'package:web/web.dart'; | 18 | import 'package:web/web.dart'; |
| 18 | 19 | ||
| @@ -125,10 +126,11 @@ class MobileScannerWeb extends MobileScannerPlatform { | @@ -125,10 +126,11 @@ class MobileScannerWeb extends MobileScannerPlatform { | ||
| 125 | 126 | ||
| 126 | final MediaStreamTrack videoTrack = tracks.first; | 127 | final MediaStreamTrack videoTrack = tracks.first; |
| 127 | final MediaTrackCapabilities capabilities = videoTrack.getCapabilities(); | 128 | final MediaTrackCapabilities capabilities = videoTrack.getCapabilities(); |
| 129 | + final JSArray<JSString>? facingModes = capabilities.facingModeNullable; | ||
| 128 | 130 | ||
| 129 | - // TODO: this is empty on MacOS, where there is no facing mode, but one, user facing camera. | 131 | + // TODO: this is an empty array on MacOS Chrome, where there is no facing mode, but one, user facing camera. |
| 130 | // Facing mode is not supported by this track, do nothing. | 132 | // Facing mode is not supported by this track, do nothing. |
| 131 | - if (capabilities.facingMode.toDart.isEmpty) { | 133 | + if (facingModes == null || facingModes.toDart.isEmpty) { |
| 132 | return; | 134 | return; |
| 133 | } | 135 | } |
| 134 | 136 |
-
Please register or login to post a comment