diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index 9e26946eca08..6c90a8a5c3e9 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 2.11.0 +* Adds a flag to configure a recording to be persistent across camera changes. See + `VideoCaptureOptions.enablePersistentRecording`. * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. ## 2.10.0 diff --git a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart index f5959a74689a..8d3818f6db03 100644 --- a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart +++ b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart @@ -292,6 +292,10 @@ abstract class CameraPlatform extends PlatformInterface { } /// Sets the active camera while recording. + /// + /// On Android, you must start the recording with [startVideoCapturing] + /// with `enablePersistentRecording` set to `true` + /// to avoid cancelling any active recording. Future setDescriptionWhileRecording(CameraDescription description) { throw UnimplementedError( 'setDescriptionWhileRecording() is not implemented.', diff --git a/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart b/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart index e5b32103e795..d3141a6f2aca 100644 --- a/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart +++ b/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart @@ -18,6 +18,7 @@ class VideoCaptureOptions { this.maxDuration, this.streamCallback, this.streamOptions, + this.enablePersistentRecording = true, }) : assert( streamOptions == null || streamCallback != null, 'Must specify streamCallback if providing streamOptions.', @@ -43,6 +44,17 @@ class VideoCaptureOptions { /// Should only be set if a streamCallback is also present. final CameraImageStreamOptions? streamOptions; + /// Configures the recording to be a persistent recording. + /// + /// A persistent recording can only be stopped by explicitly calling [CameraPlatform.stopVideoRecording] + /// and will ignore events that would normally cause recording to stop, such as lifecycle events. + /// + /// On Android, you must set this parameter to `true` + /// to avoid cancelling any active recording when calling [CameraPlatform.setDescriptionWhileRecording]. + /// + /// Defaults to `true`. + final bool enablePersistentRecording; + @override bool operator ==(Object other) => identical(this, other) || @@ -51,9 +63,15 @@ class VideoCaptureOptions { cameraId == other.cameraId && maxDuration == other.maxDuration && streamCallback == other.streamCallback && - streamOptions == other.streamOptions; + streamOptions == other.streamOptions && + enablePersistentRecording == other.enablePersistentRecording; @override - int get hashCode => - Object.hash(cameraId, maxDuration, streamCallback, streamOptions); + int get hashCode => Object.hash( + cameraId, + maxDuration, + streamCallback, + streamOptions, + enablePersistentRecording, + ); } diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 8ea2589400b4..ec3107396768 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ 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 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.10.0 +version: 2.11.0 environment: sdk: ^3.7.0