From 81ab7eb29b3ed80a6c900da8a9bac4c3a94d8550 Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 17 May 2025 11:27:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=90=9B=20Fix=20toggles=20overflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/camera/camera/example/lib/main.dart | 69 +++++++++----------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index cda92aadfd3..285c298775f 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -225,43 +225,33 @@ class _CameraExampleHomeState extends State /// Display the thumbnail of the captured image or video. Widget _thumbnailWidget() { - final VideoPlayerController? localVideoController = videoController; - - return Expanded( - child: Align( - alignment: Alignment.centerRight, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (localVideoController == null && imageFile == null) - Container() - else - SizedBox( - width: 64.0, - height: 64.0, - child: (localVideoController == null) - ? ( - // The captured image on the web contains a network-accessible URL - // pointing to a location within the browser. It may be displayed - // either with Image.network or Image.memory after loading the image - // bytes to memory. - kIsWeb - ? Image.network(imageFile!.path) - : Image.file(File(imageFile!.path))) - : Container( - decoration: BoxDecoration( - border: Border.all(color: Colors.pink)), - child: Center( - child: AspectRatio( - aspectRatio: - localVideoController.value.aspectRatio, - child: VideoPlayer(localVideoController)), - ), - ), + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (videoController case final VideoPlayerController controller?) + Container( + width: 64.0, + height: 64.0, + decoration: BoxDecoration(border: Border.all(color: Colors.pink)), + child: Center( + child: AspectRatio( + aspectRatio: controller.value.aspectRatio, + child: VideoPlayer(controller), ), - ], - ), - ), + ), + ) + else if (imageFile?.path case final String path) + Container( + width: 64.0, + height: 64.0, + decoration: BoxDecoration(border: Border.all(color: Colors.pink)), + // The captured image on the web contains a network-accessible URL + // pointing to a location within the browser. It may be displayed + // either with Image.network or Image.memory after loading the image + // bytes to memory. + child: kIsWeb ? Image.network(path) : Image.file(File(path)), + ), + ], ); } @@ -598,7 +588,12 @@ class _CameraExampleHomeState extends State } } - return Row(children: toggles); + return Expanded( + child: SizedBox( + height: kMinInteractiveDimension, + child: ListView(scrollDirection: Axis.horizontal, children: toggles), + ), + ); } String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); From 32a1d00e2afb71af7eab3dc004031b8c4e27cbd0 Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 17 May 2025 11:35:52 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=9B=20Fix=20height?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/camera/camera/example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index 285c298775f..f2753ef4c47 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -590,7 +590,7 @@ class _CameraExampleHomeState extends State return Expanded( child: SizedBox( - height: kMinInteractiveDimension, + height: 56.0, child: ListView(scrollDirection: Axis.horizontal, children: toggles), ), ); From e3723e7570ed406fa4198d55d52c8ca14a71a86f Mon Sep 17 00:00:00 2001 From: Alex Li Date: Mon, 19 May 2025 15:40:46 +0800 Subject: [PATCH 3/5] Update CHANGELOG.md --- packages/camera/camera/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index d0d58be6ca9..3a51ef5a6ba 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +- Fixes overflowed toggles in the camera example. + ## 0.11.1 * Adds API support query for image streaming. From 3b690acc7145fd42ecf6a972bee8a08080039029 Mon Sep 17 00:00:00 2001 From: Alex Li Date: Mon, 19 May 2025 15:59:10 +0800 Subject: [PATCH 4/5] Update CHANGELOG.md --- packages/camera/camera/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 3a51ef5a6ba..97a41bea6c8 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,6 @@ ## NEXT -- Fixes overflowed toggles in the camera example. +* Fixes overflowed toggles in the camera example. ## 0.11.1 From 43c0a66948bef043278fb586ce308e58f29a113d Mon Sep 17 00:00:00 2001 From: Alex Li Date: Wed, 21 May 2025 11:07:19 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A7=AA=20Try=20to=20add=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/camera/camera/example/lib/main.dart | 3 +++ .../camera/camera/example/test/main_test.dart | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index f2753ef4c47..a11d0f7083e 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -1043,6 +1043,9 @@ class CameraApp extends StatelessWidget { } } +/// Getting available cameras for testing. +@visibleForTesting +List get cameras => _cameras; List _cameras = []; Future main() async { diff --git a/packages/camera/camera/example/test/main_test.dart b/packages/camera/camera/example/test/main_test.dart index 6e909efcfc6..eb75a29f8ed 100644 --- a/packages/camera/camera/example/test/main_test.dart +++ b/packages/camera/camera/example/test/main_test.dart @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:camera/camera.dart'; import 'package:camera_example/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -13,4 +14,23 @@ void main() { await tester.pumpAndSettle(); expect(find.byType(SnackBar), findsOneWidget); }); + + testWidgets( + 'CameraDescription toggles will not overflow', + (WidgetTester tester) async { + WidgetsFlutterBinding.ensureInitialized(); + // Adds 10 fake camera descriptions. + for (int i = 0; i < 10; i++) { + cameras.add( + CameraDescription( + name: 'camera_$i', + lensDirection: CameraLensDirection.back, + sensorOrientation: 90, + ), + ); + } + await tester.pumpWidget(const CameraApp()); + await tester.pumpAndSettle(); + }, + ); }