From 609e8c06a15a53614b6fc10d9015bbc1de0bdeda Mon Sep 17 00:00:00 2001 From: Bartosz Selwesiuk Date: Thu, 22 Jul 2021 12:35:55 +0200 Subject: [PATCH 1/4] feat: add getViewType to Camera --- packages/camera/camera_web/lib/src/camera.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/camera/camera_web/lib/src/camera.dart b/packages/camera/camera_web/lib/src/camera.dart index 334f117be274..06551705f056 100644 --- a/packages/camera/camera_web/lib/src/camera.dart +++ b/packages/camera/camera_web/lib/src/camera.dart @@ -196,6 +196,9 @@ class Camera { } } + /// Returns the registered view type of the camera. + String getViewType() => _getViewType(textureId); + /// Disposes the camera by stopping the camera stream /// and reloading the camera source. void dispose() { From fff7fcce6b8d3d3cc117b59fcb5c63a25adb800f Mon Sep 17 00:00:00 2001 From: Bartosz Selwesiuk Date: Thu, 22 Jul 2021 12:36:03 +0200 Subject: [PATCH 2/4] test: add getViewType tests --- .../example/integration_test/camera_test.dart | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/camera/camera_web/example/integration_test/camera_test.dart b/packages/camera/camera_web/example/integration_test/camera_test.dart index 6eeed23ecf56..b92e6e34cc59 100644 --- a/packages/camera/camera_web/example/integration_test/camera_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_test.dart @@ -507,6 +507,24 @@ void main() { }); }); + group('getViewType', () { + testWidgets('returns a correct view type', (tester) async { + const textureId = 1; + + final camera = Camera( + textureId: textureId, + window: window, + ); + + await camera.initialize(); + + expect( + camera.getViewType(), + equals('plugins.flutter.io/camera_$textureId'), + ); + }); + }); + group('dispose', () { testWidgets('resets the video element\'s source', (tester) async { final camera = Camera( From 8c72b3f8a98e69661b05f3fcc048aa351f7c3536 Mon Sep 17 00:00:00 2001 From: Bartosz Selwesiuk Date: Thu, 22 Jul 2021 12:36:17 +0200 Subject: [PATCH 3/4] feat: add buildPreview implementation --- packages/camera/camera_web/lib/src/camera_web.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_web/lib/src/camera_web.dart b/packages/camera/camera_web/lib/src/camera_web.dart index e58572e50ee4..263e0539f931 100644 --- a/packages/camera/camera_web/lib/src/camera_web.dart +++ b/packages/camera/camera_web/lib/src/camera_web.dart @@ -361,7 +361,9 @@ class CameraPlugin extends CameraPlatform { @override Widget buildPreview(int cameraId) { - throw UnimplementedError('buildPreview() is not implemented.'); + return HtmlElementView( + viewType: getCamera(cameraId).getViewType(), + ); } @override From 1981a713c3c52b16aed02e8eae3d0668e7ab78b9 Mon Sep 17 00:00:00 2001 From: Bartosz Selwesiuk Date: Thu, 22 Jul 2021 12:36:35 +0200 Subject: [PATCH 4/4] test: add buildPreview tests --- .../integration_test/camera_web_test.dart | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_web/example/integration_test/camera_web_test.dart b/packages/camera/camera_web/example/integration_test/camera_web_test.dart index d5e1835391ad..7539dd3b33f9 100644 --- a/packages/camera/camera_web/example/integration_test/camera_web_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_web_test.dart @@ -11,6 +11,7 @@ import 'package:camera_web/camera_web.dart'; import 'package:camera_web/src/camera.dart'; import 'package:camera_web/src/camera_settings.dart'; import 'package:camera_web/src/types/types.dart'; +import 'package:flutter/widgets.dart' as widgets; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -634,10 +635,24 @@ void main() { ); }); - testWidgets('buildPreview throws UnimplementedError', (tester) async { + testWidgets( + 'buildPreview returns an HtmlElementView ' + 'with an appropriate view type', (tester) async { + final camera = Camera( + textureId: cameraId, + window: window, + ); + + // Save the camera in the camera plugin. + (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; + expect( - () => CameraPlatform.instance.buildPreview(cameraId), - throwsUnimplementedError, + CameraPlatform.instance.buildPreview(cameraId), + isA().having( + (view) => view.viewType, + 'viewType', + camera.getViewType(), + ), ); });