From 1fb5f4fea11140705d0a176d026cc82f42e2c458 Mon Sep 17 00:00:00 2001 From: BeMacized Date: Thu, 26 Aug 2021 16:04:19 +0200 Subject: [PATCH 1/3] [camera] fix exception of controller being used after disposal by preview widget --- packages/camera/camera/example/lib/main.dart | 10 +++------- packages/camera/camera/lib/src/camera_controller.dart | 10 ++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index 2314aecbece3..a172e6e6f649 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -594,7 +594,9 @@ class _CameraExampleHomeState extends State } void onNewCameraSelected(CameraDescription cameraDescription) async { - final previousCameraController = controller; + if (controller != null) { + await controller!.dispose(); + } final CameraController cameraController = CameraController( cameraDescription, @@ -605,10 +607,6 @@ class _CameraExampleHomeState extends State controller = cameraController; - if (mounted) { - setState(() {}); - } - // If the controller is updated then update the UI. cameraController.addListener(() { if (mounted) setState(() {}); @@ -641,8 +639,6 @@ class _CameraExampleHomeState extends State if (mounted) { setState(() {}); } - - await previousCameraController?.dispose(); } void onTakePictureButtonPressed() { diff --git a/packages/camera/camera/lib/src/camera_controller.dart b/packages/camera/camera/lib/src/camera_controller.dart index 37869fe78528..977e06991c02 100644 --- a/packages/camera/camera/lib/src/camera_controller.dart +++ b/packages/camera/camera/lib/src/camera_controller.dart @@ -778,4 +778,14 @@ class CameraController extends ValueNotifier { ); } } + + @override + void removeListener(VoidCallback listener) { + // Prevent ValueListenableBuilder in CameraPreview widget from causing an + // exception to be thrown by attempting to remove its own listener after + // the controller has already been disposed. + if (!_isDisposed) { + super.removeListener(listener); + } + } } From 1409d862c35aac26eb74daa8bbaf69bf6497b414 Mon Sep 17 00:00:00 2001 From: BeMacized Date: Thu, 26 Aug 2021 16:08:10 +0200 Subject: [PATCH 2/3] Updated pubspec and changelog --- packages/camera/camera/CHANGELOG.md | 4 ++++ packages/camera/camera/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 73cce2c539c1..1f5710c43d45 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.2 + +* Fixed camera controller throwing an exception when being replaced in the preview widget. + ## 0.9.1 * Added `lensAperture`, `sensorExposureTime` and `sensorSensitivity` properties to the `CameraImage` dto. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 08d1e3eead4f..c1b69dcdb946 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for getting information about and controlling the and streaming image buffers to dart. repository: https://github.com/flutter/plugins/tree/master/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.1 +version: 0.9.2 environment: sdk: ">=2.12.0 <3.0.0" From fe5fe34f55fd9c015a588ab1cb34575803cf691f Mon Sep 17 00:00:00 2001 From: BeMacized Date: Thu, 26 Aug 2021 16:18:14 +0200 Subject: [PATCH 3/3] Updated pubspec and changelog --- packages/camera/camera/CHANGELOG.md | 2 +- packages/camera/camera/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 1f5710c43d45..977d82492475 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.9.2 +## 0.9.1+1 * Fixed camera controller throwing an exception when being replaced in the preview widget. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index c1b69dcdb946..1009191e771e 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for getting information about and controlling the and streaming image buffers to dart. repository: https://github.com/flutter/plugins/tree/master/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.2 +version: 0.9.1+1 environment: sdk: ">=2.12.0 <3.0.0"