mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-10-19 23:00:39 +00:00
5602b1ed80
* updated pub version * added lint * --code=always_use_package_imports * dart fixes * format * other lints
47 lines
1.5 KiB
Dart
47 lines
1.5 KiB
Dart
import 'package:camera/camera.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
|
|
class CameraView extends StatelessWidget {
|
|
final CameraController controller;
|
|
|
|
const CameraView({required this.controller, super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final value = controller.value;
|
|
return ValueListenableBuilder<CameraValue>(
|
|
valueListenable: controller,
|
|
builder: (_, __, ___) => AspectRatio(
|
|
aspectRatio: _isLandscape(value) ? value.aspectRatio : (1 / value.aspectRatio),
|
|
child: RotatedBox(
|
|
quarterTurns: _getQuarterTurns(value),
|
|
child: controller.buildPreview(),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
bool _isLandscape(CameraValue value) {
|
|
return <DeviceOrientation>[DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]
|
|
.contains(_getApplicableOrientation(value));
|
|
}
|
|
|
|
int _getQuarterTurns(CameraValue value) {
|
|
final Map<DeviceOrientation, int> turns = <DeviceOrientation, int>{
|
|
DeviceOrientation.portraitUp: 0,
|
|
DeviceOrientation.landscapeRight: 1,
|
|
DeviceOrientation.portraitDown: 2,
|
|
DeviceOrientation.landscapeLeft: 3,
|
|
};
|
|
return turns[_getApplicableOrientation(value)]!;
|
|
}
|
|
|
|
DeviceOrientation _getApplicableOrientation(CameraValue value) {
|
|
return value.isRecordingVideo
|
|
? value.recordingOrientation!
|
|
: (value.previewPauseOrientation ??
|
|
value.lockedCaptureOrientation ??
|
|
value.deviceOrientation);
|
|
}
|
|
}
|