diff --git a/packages/camera/camera_web/CHANGELOG.md b/packages/camera/camera_web/CHANGELOG.md index 47a3f6ee516..20c9b3402cd 100644 --- a/packages/camera/camera_web/CHANGELOG.md +++ b/packages/camera/camera_web/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.3.5+1 * Updates minimum supported SDK version to Flutter 3.32/Dart 3.8. +* Fixes camera initialization failure on Firefox Android by using `{video: true}` instead of `{video: {}}` when no video constraints are specified. ## 0.3.5 diff --git a/packages/camera/camera_web/example/integration_test/camera_options_test.dart b/packages/camera/camera_web/example/integration_test/camera_options_test.dart index c6e5740f0cb..c9bf2e29d35 100644 --- a/packages/camera/camera_web/example/integration_test/camera_options_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_options_test.dart @@ -108,6 +108,13 @@ void main() { ); }); + testWidgets('serializes to true when no constraints are provided', ( + WidgetTester tester, + ) async { + const VideoConstraints videoConstraints = VideoConstraints(); + expect(videoConstraints.toMediaStreamConstraints().dartify(), isTrue); + }); + testWidgets('supports value equality', (WidgetTester tester) async { expect( VideoConstraints( diff --git a/packages/camera/camera_web/lib/src/types/camera_options.dart b/packages/camera/camera_web/lib/src/types/camera_options.dart index 49572724b0a..f9cea14b8ec 100644 --- a/packages/camera/camera_web/lib/src/types/camera_options.dart +++ b/packages/camera/camera_web/lib/src/types/camera_options.dart @@ -108,12 +108,16 @@ class VideoConstraints { // TODO(dit): package:web has a class for this. Use it instead of jsify and toJson. /// Convert `this` to something that can be used on the browser. JSAny toMediaStreamConstraints() { - return { + final Map constraints = { if (width != null) 'width': width!.toJson(), if (height != null) 'height': height!.toJson(), if (facingMode != null) 'facingMode': facingMode!.toJson(), if (deviceId != null) 'deviceId': {'exact': deviceId!}, - }.jsify()!; + }; + + // Return true instead of empty object for better browser compatibility. + // Firefox Android rejects getUserMedia({video: {}}) but accepts {video: true}. + return constraints.isEmpty ? true.toJS : constraints.jsify()!; } @override diff --git a/packages/camera/camera_web/pubspec.yaml b/packages/camera/camera_web/pubspec.yaml index 045022e9405..0b8f161a6e0 100644 --- a/packages/camera/camera_web/pubspec.yaml +++ b/packages/camera/camera_web/pubspec.yaml @@ -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 +version: 0.3.5+1 environment: sdk: ^3.8.0