Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/camera/camera_web/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## NEXT
## 0.3.5+4

* Updates minimum supported SDK version to Flutter 3.38/Dart 3.10.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,60 @@ void main() {
expect(facingMode, equals('environment'));
});

testWidgets('returns null '
'when the facing mode setting is empty and '
'the first facingMode capability is not a JavaScript string', (
WidgetTester tester,
) async {
mockVideoTrack.getSettings = () {
return web.MediaTrackSettings(facingMode: '');
}.toJS;
mockVideoTrack.getCapabilities = () {
return createJSInteropWrapper(FakeMediaTrackCapabilities())
as web.MediaTrackCapabilities;
}.toJS;

when(
jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS),
).thenReturn(true);
when(
jsUtil.getProperty(any, 'facingMode'.toJS),
).thenReturn(<JSAny>[true.toJS].toJS);

final String? facingMode = cameraService.getFacingModeForVideoTrack(
videoTrack,
);

expect(facingMode, isNull);
});

testWidgets('returns null '
'when the facing mode setting is empty and '
'the facingMode capability is not a JavaScript array', (
WidgetTester tester,
) async {
mockVideoTrack.getSettings = () {
return web.MediaTrackSettings(facingMode: '');
}.toJS;
mockVideoTrack.getCapabilities = () {
return createJSInteropWrapper(FakeMediaTrackCapabilities())
as web.MediaTrackCapabilities;
}.toJS;

when(
jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS),
).thenReturn(true);
when(
jsUtil.getProperty(any, 'facingMode'.toJS),
).thenReturn(true.toJS);

final String? facingMode = cameraService.getFacingModeForVideoTrack(
videoTrack,
);

expect(facingMode, isNull);
});

testWidgets('returns null '
'when the facing mode setting '
'and capabilities are empty', (WidgetTester tester) async {
Expand Down
27 changes: 16 additions & 11 deletions packages/camera/camera_web/lib/src/camera_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -200,19 +200,24 @@ class CameraService {

// A list of facing mode capabilities as
// the camera may support multiple facing modes.
final List<String> facingModeCapabilities =
videoTrackCapabilities.facingModeNullable?.toDart
.map((JSString e) => e.toDart)
.toList() ??
<String>[];

if (facingModeCapabilities.isNotEmpty) {
final String facingModeCapability = facingModeCapabilities.first;
return facingModeCapability;
} else {
// Return null if there are no facing mode capabilities.
final JSAny? facingModeCapabilities = jsUtil.getProperty(
videoTrackCapabilities,
'facingMode'.toJS,
);
if (facingModeCapabilities == null ||
!facingModeCapabilities.isA<JSArray>()) {
return null;
}

final List<JSAny?> facingModes =
(facingModeCapabilities as JSArray).toDart;

if (facingModes.isNotEmpty && facingModes.first.isA<JSString>()) {
return (facingModes.first! as JSString).toDart;
}

// Return null if there are no facing mode capabilities.
return null;
}

return facingMode;
Expand Down
2 changes: 1 addition & 1 deletion packages/camera/camera_web/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: camera_web
description: A Flutter plugin for getting information about and controlling the camera on Web.
repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
version: 0.3.5+3
version: 0.3.5+4

environment:
sdk: ^3.10.0
Expand Down