From 32a6914a2977efdcd8148d46ad14a5e54169a94d Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 12:03:27 +0400 Subject: [PATCH 01/18] [animations] Refactor `Radio` widgets in example Refactors the `shared_axis_transition.dart` example to use a new `RadioGroup` widget. This removes the deprecated `groupValue` and `onChanged` properties from each individual `Radio` button --- .../example/lib/shared_axis_transition.dart | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/packages/animations/example/lib/shared_axis_transition.dart b/packages/animations/example/lib/shared_axis_transition.dart index 2c5633d17a1..d9201bd215b 100644 --- a/packages/animations/example/lib/shared_axis_transition.dart +++ b/packages/animations/example/lib/shared_axis_transition.dart @@ -76,34 +76,28 @@ class _SharedAxisTransitionDemoState extends State { ), ), const Divider(thickness: 2.0), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Radio( - value: SharedAxisTransitionType.horizontal, - groupValue: _transitionType, - onChanged: (SharedAxisTransitionType? newValue) { - _updateTransitionType(newValue); - }, - ), - const Text('X'), - Radio( - value: SharedAxisTransitionType.vertical, - groupValue: _transitionType, - onChanged: (SharedAxisTransitionType? newValue) { - _updateTransitionType(newValue); - }, - ), - const Text('Y'), - Radio( - value: SharedAxisTransitionType.scaled, - groupValue: _transitionType, - onChanged: (SharedAxisTransitionType? newValue) { - _updateTransitionType(newValue); - }, - ), - const Text('Z'), - ], + RadioGroup( + groupValue: _transitionType, + onChanged: (SharedAxisTransitionType? newValue) { + _updateTransitionType(newValue); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Radio( + value: SharedAxisTransitionType.horizontal, + ), + const Text('X'), + Radio( + value: SharedAxisTransitionType.vertical, + ), + const Text('Y'), + Radio( + value: SharedAxisTransitionType.scaled, + ), + const Text('Z'), + ], + ), ), ], ), From 64064df7e8b08057ce0b38c48315a0fd04a49a77 Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 12:18:11 +0400 Subject: [PATCH 02/18] [camera] Refactor `Radio` widgets in example Refactors the camera example to use a new `RadioGroup` widget. This removes deprecated `groupValue` and `onChanged` properties from each individual `RadioListTile` and moves them to the parent `RadioGroup`. --- packages/camera/camera/example/lib/main.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index 421e7c0391b..ddd533c20de 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -598,9 +598,7 @@ class _CameraExampleHomeState extends State width: 90.0, child: RadioListTile( title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - groupValue: controller?.description, value: cameraDescription, - onChanged: onChanged, ), ), ); @@ -610,7 +608,11 @@ class _CameraExampleHomeState extends State return Expanded( child: SizedBox( height: 56.0, - child: ListView(scrollDirection: Axis.horizontal, children: toggles), + child: RadioGroup( + groupValue: controller?.description, + onChanged: onChanged, + child: ListView(scrollDirection: Axis.horizontal, children: toggles), + ), ), ); } From 157a93294b95877a0dc5ed92d8747664e32d9c04 Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 12:30:44 +0400 Subject: [PATCH 03/18] [camera] Refactor `Radio` widgets in example Refactors the camera example to use a new `RadioGroup` widget. This removes deprecated `groupValue` and `onChanged` properties from each individual `RadioListTile` and moves them to the parent `RadioGroup`. --- packages/camera/camera_android/example/lib/main.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android/example/lib/main.dart b/packages/camera/camera_android/example/lib/main.dart index 0a95ef9923b..10b0b9c4e92 100644 --- a/packages/camera/camera_android/example/lib/main.dart +++ b/packages/camera/camera_android/example/lib/main.dart @@ -599,16 +599,18 @@ class _CameraExampleHomeState extends State width: 90.0, child: RadioListTile( title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - groupValue: controller?.description, value: cameraDescription, - onChanged: onChanged, ), ), ); } } - return Row(children: toggles); + return RadioGroup( + groupValue: controller?.description, + onChanged: onChanged, + child: Row(children: toggles), + ); } String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); From 8109fb3e8e746a78ed5cb86b1e6835037d6c0fde Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 12:35:53 +0400 Subject: [PATCH 04/18] [camera_android_camerax] Refactor `Radio` widgets in example Refactors the `camera_android_camerax` example to use a new `RadioGroup` widget. This removes the deprecated `groupValue` and `onChanged` properties from each individual `RadioListTile` and moves them to the parent `RadioGroup`. --- .../camera/camera_android_camerax/example/lib/main.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart index 55a689cdeaf..19d1182418c 100644 --- a/packages/camera/camera_android_camerax/example/lib/main.dart +++ b/packages/camera/camera_android_camerax/example/lib/main.dart @@ -609,16 +609,18 @@ class _CameraExampleHomeState extends State width: 90.0, child: RadioListTile( title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - groupValue: controller?.description, value: cameraDescription, - onChanged: onChanged, ), ), ); } } - return Row(children: toggles); + return RadioGroup( + groupValue: controller?.description, + onChanged: onChanged, + child: Row(children: toggles), + ); } String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); From bc09c33464eaf0e856475ed85ef0c470015da337 Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 13:31:42 +0400 Subject: [PATCH 05/18] [camera_avfoundation] Refactor `Radio` widgets in example Refactors the `camera_avfoundation` example to use a new `RadioGroup` widget. This removes deprecated `onChanged` logic from each `RadioListTile` and moves it to the parent `RadioGroup`. --- .../camera_avfoundation/example/lib/main.dart | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/camera/camera_avfoundation/example/lib/main.dart b/packages/camera/camera_avfoundation/example/lib/main.dart index 2f8817046a6..b18e8ade528 100644 --- a/packages/camera/camera_avfoundation/example/lib/main.dart +++ b/packages/camera/camera_avfoundation/example/lib/main.dart @@ -579,14 +579,6 @@ class _CameraExampleHomeState extends State Widget _cameraTogglesRowWidget() { final List toggles = []; - void onChanged(CameraDescription? description) { - if (description == null) { - return; - } - - onNewCameraSelected(description); - } - if (_cameras.isEmpty) { SchedulerBinding.instance.addPostFrameCallback((_) async { showInSnackBar('No camera found.'); @@ -599,18 +591,27 @@ class _CameraExampleHomeState extends State width: 90.0, child: RadioListTile( title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - groupValue: controller?.description, value: cameraDescription, - onChanged: (controller?.value.isRecordingVideo ?? false) - ? null - : onChanged, ), ), ); } } - return Row(children: toggles); + final isRecording = controller?.value.isRecordingVideo ?? false; + + return RadioGroup( + groupValue: controller?.description, + onChanged: (CameraDescription? description) { + if (isRecording) { + return; + } + if (description != null) { + onNewCameraSelected(description); + } + }, + child: Row(children: toggles), + ); } String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); From dfc61242010c330c8d4054feae2ab1599b3544f9 Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 13:43:06 +0400 Subject: [PATCH 06/18] [google_sign_in_web] Refactor `Radio` widgets in example Refactors the `google_sign_in_web` example to use a new `RadioGroup` widget. This removes the deprecated `groupValue` and `onChanged` properties from each individual `RadioListTile` and moves them to the parent `RadioGroup`. --- .../lib/src/button_configuration_column.dart | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart index d2726e17cc0..5862b7c65f8 100644 --- a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart +++ b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart @@ -169,21 +169,30 @@ Widget _renderRadioListTileCard({ T? selected, void Function(T?)? onChanged, }) { + final void Function(T?) handleChange = onChanged ?? (_) {}; + return _renderConfigCard( title: title, - children: - values - .map( - (T value) => RadioListTile( - value: value, - groupValue: selected, - onChanged: onChanged, - selected: value == selected, - title: Text(value.name), - dense: true, - ), - ) - .toList(), + children: [ + RadioGroup( + groupValue: selected, + onChanged: (T? v) => handleChange(v), + child: Column( + mainAxisSize: MainAxisSize.min, + children: + values + .map( + (T value) => RadioListTile( + value: value, + selected: value == selected, + title: Text(value.name), + dense: true, + ), + ) + .toList(), + ), + ), + ], ); } From 57f7be96cd9c5a24863ae37f969d87302444cef1 Mon Sep 17 00:00:00 2001 From: Alexander Kobozev Date: Wed, 1 Oct 2025 13:58:03 +0400 Subject: [PATCH 07/18] [two_dimensional_scrollables] Refactor `Radio` widgets in example Refactors the `two_dimensional_scrollables` example to use a new `RadioGroup` widget. This removes the deprecated `groupValue` and `onChanged` properties from each individual `Radio` button and moves them to the parent `RadioGroup`. --- .../lib/table_view/table_explorer.dart | 43 +++++++------------ .../example/lib/tree_view/tree_explorer.dart | 29 ++++++------- 2 files changed, 27 insertions(+), 45 deletions(-) diff --git a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart index 76af4d13e4a..71b02285756 100644 --- a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart @@ -56,38 +56,25 @@ class _TableExplorerState extends State { child: Row( children: [ const Spacer(), - Radio( - value: TableType.simple, + RadioGroup( groupValue: _currentExample, onChanged: (TableType? value) { - setState(() { - _currentExample = value!; - }); + if (value == null) return; + setState(() => _currentExample = value); }, + child: Row( + children: [ + Radio(value: TableType.simple), + const Text('Simple'), + _spacer, + Radio(value: TableType.merged), + const Text('Merged'), + _spacer, + Radio(value: TableType.infinite), + const Text('Infinite'), + ], + ), ), - const Text('Simple'), - _spacer, - Radio( - value: TableType.merged, - groupValue: _currentExample, - onChanged: (TableType? value) { - setState(() { - _currentExample = value!; - }); - }, - ), - const Text('Merged'), - _spacer, - Radio( - value: TableType.infinite, - groupValue: _currentExample, - onChanged: (TableType? value) { - setState(() { - _currentExample = value!; - }); - }, - ), - const Text('Infinite'), const Spacer(), ], ), diff --git a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart index c943e954ac3..c7490fc4c3b 100644 --- a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart @@ -50,27 +50,22 @@ class _TreeExplorerState extends State { child: Row( children: [ const Spacer(), - Radio( - value: TreeType.simple, + RadioGroup( groupValue: _currentExample, onChanged: (TreeType? value) { - setState(() { - _currentExample = value!; - }); + if (value == null) return; + setState(() => _currentExample = value); }, + child: Row( + children: [ + Radio(value: TreeType.simple), + const Text('Simple'), + _spacer, + Radio(value: TreeType.custom), + const Text('Custom'), + ], + ), ), - const Text('Simple'), - _spacer, - Radio( - value: TreeType.custom, - groupValue: _currentExample, - onChanged: (TreeType? value) { - setState(() { - _currentExample = value!; - }); - }, - ), - const Text('Custom'), const Spacer(), ], ), From 7b2db364f34d6dd19371936bf223e9de681fa305 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 1 Oct 2025 14:40:02 +0400 Subject: [PATCH 08/18] Fix lints in animations example Removes `const` from `Text` widgets inside a `Row` that was not itself `const`, and adds `const` to the `Row` itself. --- .../animations/example/lib/shared_axis_transition.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/animations/example/lib/shared_axis_transition.dart b/packages/animations/example/lib/shared_axis_transition.dart index d9201bd215b..af1d682506d 100644 --- a/packages/animations/example/lib/shared_axis_transition.dart +++ b/packages/animations/example/lib/shared_axis_transition.dart @@ -81,21 +81,21 @@ class _SharedAxisTransitionDemoState extends State { onChanged: (SharedAxisTransitionType? newValue) { _updateTransitionType(newValue); }, - child: Row( + child: const Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Radio( value: SharedAxisTransitionType.horizontal, ), - const Text('X'), + Text('X'), Radio( value: SharedAxisTransitionType.vertical, ), - const Text('Y'), + Text('Y'), Radio( value: SharedAxisTransitionType.scaled, ), - const Text('Z'), + Text('Z'), ], ), ), From fe84be7db15312cd0023152884606fd397d477d7 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 1 Oct 2025 14:48:17 +0400 Subject: [PATCH 09/18] [two_dimensional_scrollables] Fix lints in examples Adds `const` to constructors and curly braces to control flow statements to fix new lint warnings in the `table_explorer.dart` and `tree_explorer.dart` examples. --- .../example/lib/table_view/table_explorer.dart | 15 +++++++-------- .../example/lib/tree_view/tree_explorer.dart | 13 ++++++------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart index 71b02285756..1b903dad467 100644 --- a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart @@ -59,18 +59,20 @@ class _TableExplorerState extends State { RadioGroup( groupValue: _currentExample, onChanged: (TableType? value) { - if (value == null) return; + if (value == null) { + return; + } setState(() => _currentExample = value); }, child: Row( children: [ - Radio(value: TableType.simple), + const Radio(value: TableType.simple), const Text('Simple'), _spacer, - Radio(value: TableType.merged), + const Radio(value: TableType.merged), const Text('Merged'), _spacer, - Radio(value: TableType.infinite), + const Radio(value: TableType.infinite), const Text('Infinite'), ], ), @@ -88,10 +90,7 @@ class _TableExplorerState extends State { title: Text(_getTitle()), bottom: PreferredSize( preferredSize: const Size.fromHeight(50), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: _getRadioRow(), - ), + child: Padding(padding: const EdgeInsets.all(8.0), child: _getRadioRow()), ), ), body: _getTable(), diff --git a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart index c7490fc4c3b..8078c6f1da4 100644 --- a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart @@ -53,15 +53,17 @@ class _TreeExplorerState extends State { RadioGroup( groupValue: _currentExample, onChanged: (TreeType? value) { - if (value == null) return; + if (value == null) { + return; + } setState(() => _currentExample = value); }, child: Row( children: [ - Radio(value: TreeType.simple), + const Radio(value: TreeType.simple), const Text('Simple'), _spacer, - Radio(value: TreeType.custom), + const Radio(value: TreeType.custom), const Text('Custom'), ], ), @@ -79,10 +81,7 @@ class _TreeExplorerState extends State { title: Text(_getTitle()), bottom: PreferredSize( preferredSize: const Size.fromHeight(50), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: _getRadioRow(), - ), + child: Padding(padding: const EdgeInsets.all(8.0), child: _getRadioRow()), ), ), body: _getTree(), From b813cf94d8e80e0511d5573e1e48f5a18348a1f4 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 1 Oct 2025 15:01:27 +0400 Subject: [PATCH 10/18] [camera_avfoundation] Format example `main.dart` Formats the `main.dart` file in the example application to align with current project standards. This change primarily involves code formatting and does not alter any functionality. --- .../camera_avfoundation/example/lib/main.dart | 116 +++++------------- 1 file changed, 29 insertions(+), 87 deletions(-) diff --git a/packages/camera/camera_avfoundation/example/lib/main.dart b/packages/camera/camera_avfoundation/example/lib/main.dart index b18e8ade528..75f0f87f2a1 100644 --- a/packages/camera/camera_avfoundation/example/lib/main.dart +++ b/packages/camera/camera_avfoundation/example/lib/main.dart @@ -138,8 +138,7 @@ class _CameraExampleHomeState extends State decoration: BoxDecoration( color: Colors.black, border: Border.all( - color: - controller != null && controller!.value.isRecordingVideo + color: controller != null && controller!.value.isRecordingVideo ? Colors.redAccent : Colors.grey, width: 3.0, @@ -155,9 +154,7 @@ class _CameraExampleHomeState extends State _modeControlRowWidget(), Padding( padding: const EdgeInsets.all(5.0), - child: Row( - children: [_cameraTogglesRowWidget(), _thumbnailWidget()], - ), + child: Row(children: [_cameraTogglesRowWidget(), _thumbnailWidget()]), ), ], ), @@ -171,11 +168,7 @@ class _CameraExampleHomeState extends State if (cameraController == null || !cameraController.value.isInitialized) { return const Text( 'Tap a camera', - style: TextStyle( - color: Colors.white, - fontSize: 24.0, - fontWeight: FontWeight.w900, - ), + style: TextStyle(color: Colors.white, fontSize: 24.0, fontWeight: FontWeight.w900), ); } else { return Listener( @@ -189,8 +182,7 @@ class _CameraExampleHomeState extends State behavior: HitTestBehavior.opaque, onScaleStart: _handleScaleStart, onScaleUpdate: _handleScaleUpdate, - onTapDown: (TapDownDetails details) => - onViewFinderTap(details, constraints), + onTapDown: (TapDownDetails details) => onViewFinderTap(details, constraints), ); }, ), @@ -209,15 +201,9 @@ class _CameraExampleHomeState extends State return; } - _currentScale = (_baseScale * details.scale).clamp( - _minAvailableZoom, - _maxAvailableZoom, - ); + _currentScale = (_baseScale * details.scale).clamp(_minAvailableZoom, _maxAvailableZoom); - await CameraPlatform.instance.setZoomLevel( - controller!.cameraId, - _currentScale, - ); + await CameraPlatform.instance.setZoomLevel(controller!.cameraId, _currentScale); } /// Display the thumbnail of the captured image or video. @@ -242,13 +228,9 @@ class _CameraExampleHomeState extends State // 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))) + kIsWeb ? Image.network(imageFile!.path) : Image.file(File(imageFile!.path))) : Container( - decoration: BoxDecoration( - border: Border.all(color: Colors.pink), - ), + decoration: BoxDecoration(border: Border.all(color: Colors.pink)), child: Center( child: AspectRatio( aspectRatio: localVideoController.value.aspectRatio, @@ -281,16 +263,12 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.exposure), color: Colors.blue, - onPressed: controller != null - ? onExposureModeButtonPressed - : null, + onPressed: controller != null ? onExposureModeButtonPressed : null, ), IconButton( icon: const Icon(Icons.filter_center_focus), color: Colors.blue, - onPressed: controller != null - ? onFocusModeButtonPressed - : null, + onPressed: controller != null ? onFocusModeButtonPressed : null, ), ] : [], @@ -306,9 +284,7 @@ class _CameraExampleHomeState extends State : Icons.screen_rotation, ), color: Colors.blue, - onPressed: controller != null - ? onCaptureOrientationLockButtonPressed - : null, + onPressed: controller != null ? onCaptureOrientationLockButtonPressed : null, ), ], ), @@ -328,36 +304,28 @@ class _CameraExampleHomeState extends State children: [ IconButton( icon: const Icon(Icons.flash_off), - color: controller?.value.flashMode == FlashMode.off - ? Colors.orange - : Colors.blue, + color: controller?.value.flashMode == FlashMode.off ? Colors.orange : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.off) : null, ), IconButton( icon: const Icon(Icons.flash_auto), - color: controller?.value.flashMode == FlashMode.auto - ? Colors.orange - : Colors.blue, + color: controller?.value.flashMode == FlashMode.auto ? Colors.orange : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.auto) : null, ), IconButton( icon: const Icon(Icons.flash_on), - color: controller?.value.flashMode == FlashMode.always - ? Colors.orange - : Colors.blue, + color: controller?.value.flashMode == FlashMode.always ? Colors.orange : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.always) : null, ), IconButton( icon: const Icon(Icons.highlight), - color: controller?.value.flashMode == FlashMode.torch - ? Colors.orange - : Colors.blue, + color: controller?.value.flashMode == FlashMode.torch ? Colors.orange : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.torch) : null, @@ -394,15 +362,11 @@ class _CameraExampleHomeState extends State TextButton( style: styleAuto, onPressed: controller != null - ? () => - onSetExposureModeButtonPressed(ExposureMode.auto) + ? () => onSetExposureModeButtonPressed(ExposureMode.auto) : null, onLongPress: () { if (controller != null) { - CameraPlatform.instance.setExposurePoint( - controller!.cameraId, - null, - ); + CameraPlatform.instance.setExposurePoint(controller!.cameraId, null); showInSnackBar('Resetting exposure point'); } }, @@ -411,17 +375,13 @@ class _CameraExampleHomeState extends State TextButton( style: styleLocked, onPressed: controller != null - ? () => onSetExposureModeButtonPressed( - ExposureMode.locked, - ) + ? () => onSetExposureModeButtonPressed(ExposureMode.locked) : null, child: const Text('LOCKED'), ), TextButton( style: styleLocked, - onPressed: controller != null - ? () => controller!.setExposureOffset(0.0) - : null, + onPressed: controller != null ? () => controller!.setExposureOffset(0.0) : null, child: const Text('RESET OFFSET'), ), ], @@ -436,9 +396,7 @@ class _CameraExampleHomeState extends State min: _minAvailableExposureOffset, max: _maxAvailableExposureOffset, label: _currentExposureOffset.toString(), - onChanged: - _minAvailableExposureOffset == - _maxAvailableExposureOffset + onChanged: _minAvailableExposureOffset == _maxAvailableExposureOffset ? null : setExposureOffset, ), @@ -454,9 +412,7 @@ class _CameraExampleHomeState extends State Widget _focusModeControlRowWidget() { final ButtonStyle styleAuto = TextButton.styleFrom( - foregroundColor: controller?.value.focusMode == FocusMode.auto - ? Colors.orange - : Colors.blue, + foregroundColor: controller?.value.focusMode == FocusMode.auto ? Colors.orange : Colors.blue, ); final ButtonStyle styleLocked = TextButton.styleFrom( foregroundColor: controller?.value.focusMode == FocusMode.locked @@ -482,10 +438,7 @@ class _CameraExampleHomeState extends State : null, onLongPress: () { if (controller != null) { - CameraPlatform.instance.setFocusPoint( - controller!.cameraId, - null, - ); + CameraPlatform.instance.setFocusPoint(controller!.cameraId, null); } showInSnackBar('Resetting focus point'); }, @@ -563,13 +516,10 @@ class _CameraExampleHomeState extends State ), IconButton( icon: const Icon(Icons.pause_presentation), - color: - cameraController != null && cameraController.value.isPreviewPaused + color: cameraController != null && cameraController.value.isPreviewPaused ? Colors.red : Colors.blue, - onPressed: cameraController == null - ? null - : onPausePreviewButtonPressed, + onPressed: cameraController == null ? null : onPausePreviewButtonPressed, ), ], ); @@ -598,7 +548,7 @@ class _CameraExampleHomeState extends State } } - final isRecording = controller?.value.isRecordingVideo ?? false; + final bool isRecording = controller?.value.isRecordingVideo ?? false; return RadioGroup( groupValue: controller?.description, @@ -617,9 +567,7 @@ class _CameraExampleHomeState extends State String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); void showInSnackBar(String message) { - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text(message))); + ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message))); } void onViewFinderTap(TapDownDetails details, BoxConstraints constraints) { @@ -645,9 +593,7 @@ class _CameraExampleHomeState extends State } } - Future _initializeCameraController( - CameraDescription cameraDescription, - ) async { + Future _initializeCameraController(CameraDescription cameraDescription) async { final CameraController cameraController = CameraController( cameraDescription, kIsWeb ? ResolutionPreset.max : ResolutionPreset.medium, @@ -672,14 +618,10 @@ class _CameraExampleHomeState extends State ? >[ CameraPlatform.instance .getMinExposureOffset(cameraController.cameraId) - .then( - (double value) => _minAvailableExposureOffset = value, - ), + .then((double value) => _minAvailableExposureOffset = value), CameraPlatform.instance .getMaxExposureOffset(cameraController.cameraId) - .then( - (double value) => _maxAvailableExposureOffset = value, - ), + .then((double value) => _maxAvailableExposureOffset = value), ] : >[], CameraPlatform.instance From 5bcf490ea4c7785a269ca866bf50dfc2d720ee48 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 1 Oct 2025 16:10:13 +0400 Subject: [PATCH 11/18] Adds miscellaneous formatting fixes --- .../camera_avfoundation/example/lib/main.dart | 114 +++++++++++++----- .../lib/table_view/table_explorer.dart | 5 +- .../example/lib/tree_view/tree_explorer.dart | 5 +- 3 files changed, 94 insertions(+), 30 deletions(-) diff --git a/packages/camera/camera_avfoundation/example/lib/main.dart b/packages/camera/camera_avfoundation/example/lib/main.dart index 75f0f87f2a1..1de5a15849e 100644 --- a/packages/camera/camera_avfoundation/example/lib/main.dart +++ b/packages/camera/camera_avfoundation/example/lib/main.dart @@ -138,7 +138,8 @@ class _CameraExampleHomeState extends State decoration: BoxDecoration( color: Colors.black, border: Border.all( - color: controller != null && controller!.value.isRecordingVideo + color: + controller != null && controller!.value.isRecordingVideo ? Colors.redAccent : Colors.grey, width: 3.0, @@ -154,7 +155,9 @@ class _CameraExampleHomeState extends State _modeControlRowWidget(), Padding( padding: const EdgeInsets.all(5.0), - child: Row(children: [_cameraTogglesRowWidget(), _thumbnailWidget()]), + child: Row( + children: [_cameraTogglesRowWidget(), _thumbnailWidget()], + ), ), ], ), @@ -168,7 +171,11 @@ class _CameraExampleHomeState extends State if (cameraController == null || !cameraController.value.isInitialized) { return const Text( 'Tap a camera', - style: TextStyle(color: Colors.white, fontSize: 24.0, fontWeight: FontWeight.w900), + style: TextStyle( + color: Colors.white, + fontSize: 24.0, + fontWeight: FontWeight.w900, + ), ); } else { return Listener( @@ -182,7 +189,8 @@ class _CameraExampleHomeState extends State behavior: HitTestBehavior.opaque, onScaleStart: _handleScaleStart, onScaleUpdate: _handleScaleUpdate, - onTapDown: (TapDownDetails details) => onViewFinderTap(details, constraints), + onTapDown: (TapDownDetails details) => + onViewFinderTap(details, constraints), ); }, ), @@ -201,9 +209,15 @@ class _CameraExampleHomeState extends State return; } - _currentScale = (_baseScale * details.scale).clamp(_minAvailableZoom, _maxAvailableZoom); + _currentScale = (_baseScale * details.scale).clamp( + _minAvailableZoom, + _maxAvailableZoom, + ); - await CameraPlatform.instance.setZoomLevel(controller!.cameraId, _currentScale); + await CameraPlatform.instance.setZoomLevel( + controller!.cameraId, + _currentScale, + ); } /// Display the thumbnail of the captured image or video. @@ -228,9 +242,13 @@ class _CameraExampleHomeState extends State // 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))) + kIsWeb + ? Image.network(imageFile!.path) + : Image.file(File(imageFile!.path))) : Container( - decoration: BoxDecoration(border: Border.all(color: Colors.pink)), + decoration: BoxDecoration( + border: Border.all(color: Colors.pink), + ), child: Center( child: AspectRatio( aspectRatio: localVideoController.value.aspectRatio, @@ -263,12 +281,16 @@ class _CameraExampleHomeState extends State IconButton( icon: const Icon(Icons.exposure), color: Colors.blue, - onPressed: controller != null ? onExposureModeButtonPressed : null, + onPressed: controller != null + ? onExposureModeButtonPressed + : null, ), IconButton( icon: const Icon(Icons.filter_center_focus), color: Colors.blue, - onPressed: controller != null ? onFocusModeButtonPressed : null, + onPressed: controller != null + ? onFocusModeButtonPressed + : null, ), ] : [], @@ -284,7 +306,9 @@ class _CameraExampleHomeState extends State : Icons.screen_rotation, ), color: Colors.blue, - onPressed: controller != null ? onCaptureOrientationLockButtonPressed : null, + onPressed: controller != null + ? onCaptureOrientationLockButtonPressed + : null, ), ], ), @@ -304,28 +328,36 @@ class _CameraExampleHomeState extends State children: [ IconButton( icon: const Icon(Icons.flash_off), - color: controller?.value.flashMode == FlashMode.off ? Colors.orange : Colors.blue, + color: controller?.value.flashMode == FlashMode.off + ? Colors.orange + : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.off) : null, ), IconButton( icon: const Icon(Icons.flash_auto), - color: controller?.value.flashMode == FlashMode.auto ? Colors.orange : Colors.blue, + color: controller?.value.flashMode == FlashMode.auto + ? Colors.orange + : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.auto) : null, ), IconButton( icon: const Icon(Icons.flash_on), - color: controller?.value.flashMode == FlashMode.always ? Colors.orange : Colors.blue, + color: controller?.value.flashMode == FlashMode.always + ? Colors.orange + : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.always) : null, ), IconButton( icon: const Icon(Icons.highlight), - color: controller?.value.flashMode == FlashMode.torch ? Colors.orange : Colors.blue, + color: controller?.value.flashMode == FlashMode.torch + ? Colors.orange + : Colors.blue, onPressed: controller != null ? () => onSetFlashModeButtonPressed(FlashMode.torch) : null, @@ -362,11 +394,15 @@ class _CameraExampleHomeState extends State TextButton( style: styleAuto, onPressed: controller != null - ? () => onSetExposureModeButtonPressed(ExposureMode.auto) + ? () => + onSetExposureModeButtonPressed(ExposureMode.auto) : null, onLongPress: () { if (controller != null) { - CameraPlatform.instance.setExposurePoint(controller!.cameraId, null); + CameraPlatform.instance.setExposurePoint( + controller!.cameraId, + null, + ); showInSnackBar('Resetting exposure point'); } }, @@ -375,13 +411,17 @@ class _CameraExampleHomeState extends State TextButton( style: styleLocked, onPressed: controller != null - ? () => onSetExposureModeButtonPressed(ExposureMode.locked) + ? () => onSetExposureModeButtonPressed( + ExposureMode.locked, + ) : null, child: const Text('LOCKED'), ), TextButton( style: styleLocked, - onPressed: controller != null ? () => controller!.setExposureOffset(0.0) : null, + onPressed: controller != null + ? () => controller!.setExposureOffset(0.0) + : null, child: const Text('RESET OFFSET'), ), ], @@ -396,7 +436,9 @@ class _CameraExampleHomeState extends State min: _minAvailableExposureOffset, max: _maxAvailableExposureOffset, label: _currentExposureOffset.toString(), - onChanged: _minAvailableExposureOffset == _maxAvailableExposureOffset + onChanged: + _minAvailableExposureOffset == + _maxAvailableExposureOffset ? null : setExposureOffset, ), @@ -412,7 +454,9 @@ class _CameraExampleHomeState extends State Widget _focusModeControlRowWidget() { final ButtonStyle styleAuto = TextButton.styleFrom( - foregroundColor: controller?.value.focusMode == FocusMode.auto ? Colors.orange : Colors.blue, + foregroundColor: controller?.value.focusMode == FocusMode.auto + ? Colors.orange + : Colors.blue, ); final ButtonStyle styleLocked = TextButton.styleFrom( foregroundColor: controller?.value.focusMode == FocusMode.locked @@ -438,7 +482,10 @@ class _CameraExampleHomeState extends State : null, onLongPress: () { if (controller != null) { - CameraPlatform.instance.setFocusPoint(controller!.cameraId, null); + CameraPlatform.instance.setFocusPoint( + controller!.cameraId, + null, + ); } showInSnackBar('Resetting focus point'); }, @@ -516,10 +563,13 @@ class _CameraExampleHomeState extends State ), IconButton( icon: const Icon(Icons.pause_presentation), - color: cameraController != null && cameraController.value.isPreviewPaused + color: + cameraController != null && cameraController.value.isPreviewPaused ? Colors.red : Colors.blue, - onPressed: cameraController == null ? null : onPausePreviewButtonPressed, + onPressed: cameraController == null + ? null + : onPausePreviewButtonPressed, ), ], ); @@ -567,7 +617,9 @@ class _CameraExampleHomeState extends State String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); void showInSnackBar(String message) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message))); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(message))); } void onViewFinderTap(TapDownDetails details, BoxConstraints constraints) { @@ -593,7 +645,9 @@ class _CameraExampleHomeState extends State } } - Future _initializeCameraController(CameraDescription cameraDescription) async { + Future _initializeCameraController( + CameraDescription cameraDescription, + ) async { final CameraController cameraController = CameraController( cameraDescription, kIsWeb ? ResolutionPreset.max : ResolutionPreset.medium, @@ -618,10 +672,14 @@ class _CameraExampleHomeState extends State ? >[ CameraPlatform.instance .getMinExposureOffset(cameraController.cameraId) - .then((double value) => _minAvailableExposureOffset = value), + .then( + (double value) => _minAvailableExposureOffset = value, + ), CameraPlatform.instance .getMaxExposureOffset(cameraController.cameraId) - .then((double value) => _maxAvailableExposureOffset = value), + .then( + (double value) => _maxAvailableExposureOffset = value, + ), ] : >[], CameraPlatform.instance diff --git a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart index 1b903dad467..5b551d318e8 100644 --- a/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/table_view/table_explorer.dart @@ -90,7 +90,10 @@ class _TableExplorerState extends State { title: Text(_getTitle()), bottom: PreferredSize( preferredSize: const Size.fromHeight(50), - child: Padding(padding: const EdgeInsets.all(8.0), child: _getRadioRow()), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: _getRadioRow(), + ), ), ), body: _getTable(), diff --git a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart index 8078c6f1da4..0b631819bfb 100644 --- a/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart +++ b/packages/two_dimensional_scrollables/example/lib/tree_view/tree_explorer.dart @@ -81,7 +81,10 @@ class _TreeExplorerState extends State { title: Text(_getTitle()), bottom: PreferredSize( preferredSize: const Size.fromHeight(50), - child: Padding(padding: const EdgeInsets.all(8.0), child: _getRadioRow()), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: _getRadioRow(), + ), ), ), body: _getTree(), From f6b2de3379f714e63910e03e449d78e7fc438933 Mon Sep 17 00:00:00 2001 From: Alexander Date: Thu, 2 Oct 2025 12:42:02 +0400 Subject: [PATCH 12/18] Update changelogs --- packages/animations/CHANGELOG.md | 1 + packages/camera/camera/CHANGELOG.md | 3 ++- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera_android/CHANGELOG.md | 4 ++++ packages/camera/camera_android/pubspec.yaml | 2 +- packages/camera/camera_android_camerax/CHANGELOG.md | 4 ++++ packages/camera/camera_android_camerax/pubspec.yaml | 2 +- packages/camera/camera_avfoundation/CHANGELOG.md | 4 ++++ packages/camera/camera_avfoundation/pubspec.yaml | 2 +- packages/two_dimensional_scrollables/CHANGELOG.md | 1 + 10 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md index 1630957ffa5..eff172e5729 100644 --- a/packages/animations/CHANGELOG.md +++ b/packages/animations/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 2.0.11 diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index fae21094cd7..9060d4175aa 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.11.2+1 +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. * Updates README to reflect that only Android API 24+ is supported. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 073c8019872..5207181aac9 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.11.2 +version: 0.11.2+1 environment: sdk: ^3.7.0 diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 737a601ac7c..8caf695a2fc 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.10+9 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.10.10+8 * Restores compileSdk version to flutter.compileSdkVersion. diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index c9dc7d3ee8c..3ef89354afb 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.10+8 +version: 0.10.10+9 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index dc1f168e948..df64e33f214 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.23+1 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.6.23 * Converts NV21-compatible streamed images to NV21 when requested. In doing so, diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 311df6f2e43..ae49a1f64ce 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.23 +version: 0.6.23+1 environment: sdk: ^3.8.1 diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index 797d053b5e2..8bc891728d2 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.21+5 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.9.21+4 * Migrates `updateOrientation` and `setCaptureSessionPreset` methods to Swift. diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index 4603ead6659..8217f3c0e28 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.21+4 +version: 0.9.21+5 environment: sdk: ^3.9.0 diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index 21bce2fa2b5..310ef7b53ff 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 0.3.7 From 09df5091d6e7400e2d32ade64670416cb3a635ad Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 3 Oct 2025 11:12:53 +0400 Subject: [PATCH 13/18] Revert "Update changelogs" This reverts commit f6b2de3379f714e63910e03e449d78e7fc438933. --- packages/animations/CHANGELOG.md | 1 - packages/camera/camera/CHANGELOG.md | 3 +-- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera_android/CHANGELOG.md | 4 ---- packages/camera/camera_android/pubspec.yaml | 2 +- packages/camera/camera_android_camerax/CHANGELOG.md | 4 ---- packages/camera/camera_android_camerax/pubspec.yaml | 2 +- packages/camera/camera_avfoundation/CHANGELOG.md | 4 ---- packages/camera/camera_avfoundation/pubspec.yaml | 2 +- packages/two_dimensional_scrollables/CHANGELOG.md | 1 - 10 files changed, 5 insertions(+), 20 deletions(-) diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md index eff172e5729..1630957ffa5 100644 --- a/packages/animations/CHANGELOG.md +++ b/packages/animations/CHANGELOG.md @@ -1,6 +1,5 @@ ## NEXT -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 2.0.11 diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 9060d4175aa..fae21094cd7 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,5 @@ -## 0.11.2+1 +## NEXT -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. * Updates README to reflect that only Android API 24+ is supported. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 5207181aac9..073c8019872 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.11.2+1 +version: 0.11.2 environment: sdk: ^3.7.0 diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 8caf695a2fc..737a601ac7c 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.10.10+9 - -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. - ## 0.10.10+8 * Restores compileSdk version to flutter.compileSdkVersion. diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 3ef89354afb..c9dc7d3ee8c 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.10+9 +version: 0.10.10+8 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index df64e33f214..dc1f168e948 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.6.23+1 - -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. - ## 0.6.23 * Converts NV21-compatible streamed images to NV21 when requested. In doing so, diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index ae49a1f64ce..311df6f2e43 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.23+1 +version: 0.6.23 environment: sdk: ^3.8.1 diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index 8bc891728d2..797d053b5e2 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.9.21+5 - -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. - ## 0.9.21+4 * Migrates `updateOrientation` and `setCaptureSessionPreset` methods to Swift. diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index 8217f3c0e28..4603ead6659 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.21+5 +version: 0.9.21+4 environment: sdk: ^3.9.0 diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index 310ef7b53ff..21bce2fa2b5 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,6 +1,5 @@ ## NEXT -* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 0.3.7 From 6c5c615a5ca2c8da9f236f29d96ff98927f3412d Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 3 Oct 2025 12:47:48 +0400 Subject: [PATCH 14/18] [google_sign_in_web] Disable RadioListTile when onChanged is null Disables the `RadioListTile` widgets in the example when their `onChanged` callback is null. This provides a visual indication that the options are not selectable. The change also simplifies the `onChanged` handler logic within the `RadioGroup`. --- .../example/lib/src/button_configuration_column.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart index 5862b7c65f8..9211c8e7b1d 100644 --- a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart +++ b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart @@ -169,14 +169,12 @@ Widget _renderRadioListTileCard({ T? selected, void Function(T?)? onChanged, }) { - final void Function(T?) handleChange = onChanged ?? (_) {}; - return _renderConfigCard( title: title, children: [ RadioGroup( groupValue: selected, - onChanged: (T? v) => handleChange(v), + onChanged: (T? v) => (onChanged ?? (_) {})(v), child: Column( mainAxisSize: MainAxisSize.min, children: @@ -186,6 +184,7 @@ Widget _renderRadioListTileCard({ value: value, selected: value == selected, title: Text(value.name), + enabled: onChanged != null, dense: true, ), ) From 3234a2b62c02a34c62cce551ec3db294e2480183 Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 3 Oct 2025 12:55:10 +0400 Subject: [PATCH 15/18] [camera_avfoundation] Disable camera selection during recording Disables the `RadioListTile` widgets for camera selection while a video is being recorded. This prevents the user from attempting to switch cameras during a recording session, which is not a supported action. --- .../camera_avfoundation/example/lib/main.dart | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/camera/camera_avfoundation/example/lib/main.dart b/packages/camera/camera_avfoundation/example/lib/main.dart index 1de5a15849e..4d12a6f367d 100644 --- a/packages/camera/camera_avfoundation/example/lib/main.dart +++ b/packages/camera/camera_avfoundation/example/lib/main.dart @@ -584,28 +584,26 @@ class _CameraExampleHomeState extends State showInSnackBar('No camera found.'); }); return const Text('None'); - } else { - for (final CameraDescription cameraDescription in _cameras) { - toggles.add( - SizedBox( - width: 90.0, - child: RadioListTile( - title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - value: cameraDescription, - ), - ), - ); - } } final bool isRecording = controller?.value.isRecordingVideo ?? false; + for (final CameraDescription cameraDescription in _cameras) { + toggles.add( + SizedBox( + width: 90.0, + child: RadioListTile( + title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), + value: cameraDescription, + enabled: !isRecording, + ), + ), + ); + } + return RadioGroup( groupValue: controller?.description, onChanged: (CameraDescription? description) { - if (isRecording) { - return; - } if (description != null) { onNewCameraSelected(description); } From aaba5784e15367ab8a3eb9182aa0c592a89d3b52 Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 3 Oct 2025 12:56:33 +0400 Subject: [PATCH 16/18] Update changelogs --- packages/animations/CHANGELOG.md | 1 + packages/camera/camera/CHANGELOG.md | 3 ++- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera_android/CHANGELOG.md | 4 ++++ packages/camera/camera_android/pubspec.yaml | 2 +- packages/camera/camera_android_camerax/CHANGELOG.md | 4 ++++ packages/camera/camera_android_camerax/pubspec.yaml | 2 +- packages/camera/camera_avfoundation/CHANGELOG.md | 4 ++++ packages/camera/camera_avfoundation/pubspec.yaml | 2 +- packages/two_dimensional_scrollables/CHANGELOG.md | 1 + 10 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md index 1630957ffa5..eff172e5729 100644 --- a/packages/animations/CHANGELOG.md +++ b/packages/animations/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 2.0.11 diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index fae21094cd7..9060d4175aa 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.11.2+1 +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. * Updates README to reflect that only Android API 24+ is supported. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 073c8019872..5207181aac9 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.11.2 +version: 0.11.2+1 environment: sdk: ^3.7.0 diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 737a601ac7c..8caf695a2fc 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.10+9 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.10.10+8 * Restores compileSdk version to flutter.compileSdkVersion. diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index c9dc7d3ee8c..3ef89354afb 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.10+8 +version: 0.10.10+9 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index dc1f168e948..df64e33f214 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.23+1 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.6.23 * Converts NV21-compatible streamed images to NV21 when requested. In doing so, diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 311df6f2e43..ae49a1f64ce 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.23 +version: 0.6.23+1 environment: sdk: ^3.8.1 diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index e0db258bb56..d53ef70f941 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.22+1 + +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. + ## 0.9.22 * Adds lensType in the PlatformCameraDescription diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index 4c8e589abf9..f819184512f 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.22 +version: 0.9.22+1 environment: sdk: ^3.9.0 diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index 21bce2fa2b5..310ef7b53ff 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates examples to use the new RadioGroup API instead of deprecated Radio parameters. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 0.3.7 From 5e347e4036cbb13d48a797c2f66dcb70edf491f3 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 6 Oct 2025 10:51:53 +0400 Subject: [PATCH 17/18] [google_sign_in_web] Simplify `onChanged` callback in example Simplifies the `onChanged` callback in the `RadioGroup` widget by using a null-aware `call` instead of a null-coalescing operator with an empty function. --- .../example/lib/src/button_configuration_column.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart index 9211c8e7b1d..d8646a9b3c9 100644 --- a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart +++ b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart @@ -174,7 +174,7 @@ Widget _renderRadioListTileCard({ children: [ RadioGroup( groupValue: selected, - onChanged: (T? v) => (onChanged ?? (_) {})(v), + onChanged: (T? v) => onChanged?.call(v), child: Column( mainAxisSize: MainAxisSize.min, children: From 2a923fe5025c09925ec8c8b4a4b498c9794ca01a Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 7 Oct 2025 11:48:01 +0400 Subject: [PATCH 18/18] [google_sign_in_web] Update onChanged callback in example: pass it as is if non null instead of lambda --- .../example/lib/src/button_configuration_column.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart index d8646a9b3c9..5660944f9e1 100644 --- a/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart +++ b/packages/google_sign_in/google_sign_in_web/example/lib/src/button_configuration_column.dart @@ -174,7 +174,7 @@ Widget _renderRadioListTileCard({ children: [ RadioGroup( groupValue: selected, - onChanged: (T? v) => onChanged?.call(v), + onChanged: onChanged ?? (_) {}, child: Column( mainAxisSize: MainAxisSize.min, children: