diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index f6ff34d9db9e..61a420ae9ddb 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.8+15 + +* Added the `debugCheckIsDisposed` method which can be used in debug mode to validate if the `CameraController` class has been disposed. + ## 0.5.8+14 * Changed the order of the setters for `mediaRecorder` in `MediaRecorderBuilder.java` to make it more readable. diff --git a/packages/camera/lib/camera.dart b/packages/camera/lib/camera.dart index 91c6525072e1..3b2cd77c5757 100644 --- a/packages/camera/lib/camera.dart +++ b/packages/camera/lib/camera.dart @@ -307,6 +307,13 @@ class CameraController extends ValueNotifier { StreamSubscription _imageStreamSubscription; Completer _creatingCompleter; + /// Checks whether [CameraController.dispose] has completed successfully. + /// + /// This is a no-op when asserts are disabled. + void debugCheckIsDisposed() { + assert(_isDisposed); + } + /// Initializes the camera on the device. /// /// Throws a [CameraException] if the initialization fails. diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index de7d8b56d035..eede48d57654 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.5.8+14 +version: 0.5.8+15 homepage: https://github.com/flutter/plugins/tree/master/packages/camera dependencies: diff --git a/packages/camera/test/camera_test.dart b/packages/camera/test/camera_test.dart new file mode 100644 index 000000000000..cc33b369f000 --- /dev/null +++ b/packages/camera/test/camera_test.dart @@ -0,0 +1,44 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// 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:flutter_test/flutter_test.dart'; + +void main() { + group('camera', () { + test('debugCheckIsDisposed should not throw assertion error when disposed', + () { + final MockCameraDescription description = MockCameraDescription(); + final CameraController controller = CameraController( + description, + ResolutionPreset.low, + ); + + controller.dispose(); + + expect(controller.debugCheckIsDisposed, returnsNormally); + }); + + test('debugCheckIsDisposed should throw assertion error when not disposed', + () { + final MockCameraDescription description = MockCameraDescription(); + final CameraController controller = CameraController( + description, + ResolutionPreset.low, + ); + + expect( + () => controller.debugCheckIsDisposed(), + throwsAssertionError, + ); + }); + }); +} + +class MockCameraDescription extends CameraDescription { + @override + CameraLensDirection get lensDirection => CameraLensDirection.back; + + @override + String get name => 'back'; +}