Navaron Bracke

fix getCapabilities for Firefox

@@ -18,7 +18,14 @@ final class MediaTrackConstraintsDelegate { @@ -18,7 +18,14 @@ final class MediaTrackConstraintsDelegate {
18 18
19 final MediaStreamTrack track = tracks.first; 19 final MediaStreamTrack track = tracks.first;
20 20
21 - final MediaTrackCapabilities capabilities = track.getCapabilities(); 21 + final MediaTrackCapabilities capabilities;
  22 +
  23 + if (track.getCapabilitiesNullable != null) {
  24 + capabilities = track.getCapabilities();
  25 + } else {
  26 + capabilities = MediaTrackCapabilities();
  27 + }
  28 +
22 final MediaTrackSettings settings = track.getSettings(); 29 final MediaTrackSettings settings = track.getSettings();
23 final JSArray<JSString>? facingModes = capabilities.facingModeNullable; 30 final JSArray<JSString>? facingModes = capabilities.facingModeNullable;
24 31
1 import 'dart:js_interop'; 1 import 'dart:js_interop';
2 import 'package:web/web.dart'; 2 import 'package:web/web.dart';
3 3
  4 +/// This extension provides nullable properties for [MediaStreamTrack],
  5 +/// for cases where the properties are not supported by all browsers.
  6 +extension NullableMediaStreamTrackCapabilities on MediaStreamTrack {
  7 + /// The `getCapabilities` function is not supported on Firefox.
  8 + @JS('getCapabilities')
  9 + external JSFunction? get getCapabilitiesNullable;
  10 +}
  11 +
4 /// This extension provides nullable properties for [MediaTrackCapabilities], 12 /// This extension provides nullable properties for [MediaTrackCapabilities],
5 /// for cases where the properties are not supported by all browsers. 13 /// for cases where the properties are not supported by all browsers.
6 extension NullableMediaTrackCapabilities on MediaTrackCapabilities { 14 extension NullableMediaTrackCapabilities on MediaTrackCapabilities {
@@ -125,7 +125,14 @@ class MobileScannerWeb extends MobileScannerPlatform { @@ -125,7 +125,14 @@ class MobileScannerWeb extends MobileScannerPlatform {
125 } 125 }
126 126
127 final MediaStreamTrack videoTrack = tracks.first; 127 final MediaStreamTrack videoTrack = tracks.first;
128 - final MediaTrackCapabilities capabilities = videoTrack.getCapabilities(); 128 + final MediaTrackCapabilities capabilities;
  129 +
  130 + if (videoTrack.getCapabilitiesNullable != null) {
  131 + capabilities = videoTrack.getCapabilities();
  132 + } else {
  133 + capabilities = MediaTrackCapabilities();
  134 + }
  135 +
129 final JSArray<JSString>? facingModes = capabilities.facingModeNullable; 136 final JSArray<JSString>? facingModes = capabilities.facingModeNullable;
130 137
131 // TODO: this is an empty array on MacOS Chrome, where there is no facing mode, but one, user facing camera. 138 // TODO: this is an empty array on MacOS Chrome, where there is no facing mode, but one, user facing camera.