Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit ff01c1d

Browse files
authored
[camera] Fix preview pause orientation (#5209)
1 parent 3993fa7 commit ff01c1d

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

packages/camera/camera/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.9.4+24
2+
3+
* Fixes preview orientation when pausing preview with locked orientation.
4+
15
## 0.9.4+23
26

37
* Minor fixes for new analysis options.

packages/camera/camera/lib/src/camera_controller.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,8 @@ class CameraController extends ValueNotifier<CameraValue> {
359359
await CameraPlatform.instance.pausePreview(_cameraId);
360360
value = value.copyWith(
361361
isPreviewPaused: true,
362-
previewPauseOrientation:
363-
Optional<DeviceOrientation>.of(value.deviceOrientation));
362+
previewPauseOrientation: Optional<DeviceOrientation>.of(
363+
value.lockedCaptureOrientation ?? value.deviceOrientation));
364364
} on PlatformException catch (e) {
365365
throw CameraException(e.code, e.message);
366366
}
@@ -520,7 +520,7 @@ class CameraController extends ValueNotifier<CameraValue> {
520520
value = value.copyWith(
521521
isRecordingVideo: true,
522522
isRecordingPaused: false,
523-
recordingOrientation: Optional<DeviceOrientation>.fromNullable(
523+
recordingOrientation: Optional<DeviceOrientation>.of(
524524
value.lockedCaptureOrientation ?? value.deviceOrientation));
525525
} on PlatformException catch (e) {
526526
throw CameraException(e.code, e.message);
@@ -762,7 +762,7 @@ class CameraController extends ValueNotifier<CameraValue> {
762762
await CameraPlatform.instance.lockCaptureOrientation(
763763
_cameraId, orientation ?? value.deviceOrientation);
764764
value = value.copyWith(
765-
lockedCaptureOrientation: Optional<DeviceOrientation>.fromNullable(
765+
lockedCaptureOrientation: Optional<DeviceOrientation>.of(
766766
orientation ?? value.deviceOrientation));
767767
} on PlatformException catch (e) {
768768
throw CameraException(e.code, e.message);

packages/camera/camera/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing
44
Dart.
55
repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera
66
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
7-
version: 0.9.4+23
7+
version: 0.9.4+24
88

99
environment:
1010
sdk: ">=2.14.0 <3.0.0"

packages/camera/camera/test/camera_test.dart

+25
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:flutter/widgets.dart';
1313
import 'package:flutter_test/flutter_test.dart';
1414
import 'package:mockito/mockito.dart';
1515
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
16+
import 'package:quiver/core.dart';
1617

1718
List<CameraDescription> get mockAvailableCameras => <CameraDescription>[
1819
const CameraDescription(
@@ -1180,6 +1181,30 @@ void main() {
11801181
expect(cameraController.value.isPreviewPaused, equals(true));
11811182
});
11821183

1184+
test(
1185+
'pausePreview() sets previewPauseOrientation according to locked orientation',
1186+
() async {
1187+
final CameraController cameraController = CameraController(
1188+
const CameraDescription(
1189+
name: 'cam',
1190+
lensDirection: CameraLensDirection.back,
1191+
sensorOrientation: 90),
1192+
ResolutionPreset.max);
1193+
await cameraController.initialize();
1194+
cameraController.value = cameraController.value.copyWith(
1195+
isPreviewPaused: false,
1196+
deviceOrientation: DeviceOrientation.portraitUp,
1197+
lockedCaptureOrientation:
1198+
Optional<DeviceOrientation>.of(DeviceOrientation.landscapeRight));
1199+
1200+
await cameraController.pausePreview();
1201+
1202+
expect(cameraController.value.deviceOrientation,
1203+
equals(DeviceOrientation.portraitUp));
1204+
expect(cameraController.value.previewPauseOrientation,
1205+
equals(DeviceOrientation.landscapeRight));
1206+
});
1207+
11831208
test('pausePreview() throws $CameraException on $PlatformException',
11841209
() async {
11851210
final CameraController cameraController = CameraController(

0 commit comments

Comments
 (0)