mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-24 00:10:47 +00:00
added photography values
This commit is contained in:
parent
20ea464367
commit
8563ff3b15
7 changed files with 268 additions and 32 deletions
67
lib/models/aperture_value.dart
Normal file
67
lib/models/aperture_value.dart
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
part of 'photography_value.dart';
|
||||||
|
|
||||||
|
class ApertureValue extends PhotographyValue<double> {
|
||||||
|
const ApertureValue(super.rawValue, super.stopType);
|
||||||
|
|
||||||
|
@override
|
||||||
|
double get value => 1 / rawValue;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
final buffer = StringBuffer("f/");
|
||||||
|
if (rawValue - rawValue.floor() == 0 && rawValue >= 8) {
|
||||||
|
buffer.write(rawValue.toInt().toString());
|
||||||
|
} else {
|
||||||
|
buffer.write(rawValue.toStringAsFixed(1));
|
||||||
|
}
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const List<ApertureValue> apertureValues = [
|
||||||
|
ApertureValue(1.0, Stop.full),
|
||||||
|
ApertureValue(1.1, Stop.third),
|
||||||
|
ApertureValue(1.2, Stop.half),
|
||||||
|
ApertureValue(1.2, Stop.third),
|
||||||
|
ApertureValue(1.4, Stop.full),
|
||||||
|
ApertureValue(1.6, Stop.third),
|
||||||
|
ApertureValue(1.7, Stop.half),
|
||||||
|
ApertureValue(1.8, Stop.third),
|
||||||
|
ApertureValue(2.0, Stop.full),
|
||||||
|
ApertureValue(2.2, Stop.third),
|
||||||
|
ApertureValue(2.4, Stop.half),
|
||||||
|
ApertureValue(2.4, Stop.third),
|
||||||
|
ApertureValue(2.8, Stop.full),
|
||||||
|
ApertureValue(3.2, Stop.third),
|
||||||
|
ApertureValue(3.3, Stop.half),
|
||||||
|
ApertureValue(3.5, Stop.third),
|
||||||
|
ApertureValue(4.0, Stop.full),
|
||||||
|
ApertureValue(4.5, Stop.third),
|
||||||
|
ApertureValue(4.8, Stop.half),
|
||||||
|
ApertureValue(5.0, Stop.third),
|
||||||
|
ApertureValue(5.6, Stop.full),
|
||||||
|
ApertureValue(6.3, Stop.third),
|
||||||
|
ApertureValue(6.7, Stop.half),
|
||||||
|
ApertureValue(7.1, Stop.third),
|
||||||
|
ApertureValue(8, Stop.full),
|
||||||
|
ApertureValue(9, Stop.third),
|
||||||
|
ApertureValue(9.5, Stop.half),
|
||||||
|
ApertureValue(10, Stop.third),
|
||||||
|
ApertureValue(11, Stop.full),
|
||||||
|
ApertureValue(13, Stop.third),
|
||||||
|
ApertureValue(13, Stop.half),
|
||||||
|
ApertureValue(14, Stop.third),
|
||||||
|
ApertureValue(16, Stop.full),
|
||||||
|
ApertureValue(18, Stop.third),
|
||||||
|
ApertureValue(19, Stop.half),
|
||||||
|
ApertureValue(20, Stop.third),
|
||||||
|
ApertureValue(22, Stop.full),
|
||||||
|
ApertureValue(25, Stop.third),
|
||||||
|
ApertureValue(27, Stop.half),
|
||||||
|
ApertureValue(29, Stop.third),
|
||||||
|
ApertureValue(32, Stop.full),
|
||||||
|
ApertureValue(36, Stop.third),
|
||||||
|
ApertureValue(38, Stop.half),
|
||||||
|
ApertureValue(42, Stop.third),
|
||||||
|
ApertureValue(45, Stop.full),
|
||||||
|
];
|
48
lib/models/iso_value.dart
Normal file
48
lib/models/iso_value.dart
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
part of 'photography_value.dart';
|
||||||
|
|
||||||
|
class IsoValue extends PhotographyValue<int> {
|
||||||
|
const IsoValue(super.rawValue, super.stopType);
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get value => rawValue;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => value.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
const List<IsoValue> isoValues = [
|
||||||
|
IsoValue(3, Stop.full),
|
||||||
|
IsoValue(4, Stop.third),
|
||||||
|
IsoValue(5, Stop.third),
|
||||||
|
IsoValue(6, Stop.full),
|
||||||
|
IsoValue(8, Stop.third),
|
||||||
|
IsoValue(10, Stop.third),
|
||||||
|
IsoValue(12, Stop.full),
|
||||||
|
IsoValue(16, Stop.third),
|
||||||
|
IsoValue(20, Stop.third),
|
||||||
|
IsoValue(25, Stop.full),
|
||||||
|
IsoValue(32, Stop.third),
|
||||||
|
IsoValue(40, Stop.third),
|
||||||
|
IsoValue(50, Stop.full),
|
||||||
|
IsoValue(64, Stop.third),
|
||||||
|
IsoValue(80, Stop.third),
|
||||||
|
IsoValue(100, Stop.full),
|
||||||
|
IsoValue(125, Stop.third),
|
||||||
|
IsoValue(160, Stop.third),
|
||||||
|
IsoValue(200, Stop.full),
|
||||||
|
IsoValue(250, Stop.third),
|
||||||
|
IsoValue(320, Stop.third),
|
||||||
|
IsoValue(400, Stop.full),
|
||||||
|
IsoValue(500, Stop.third),
|
||||||
|
IsoValue(640, Stop.third),
|
||||||
|
IsoValue(800, Stop.full),
|
||||||
|
IsoValue(1000, Stop.third),
|
||||||
|
IsoValue(1250, Stop.third),
|
||||||
|
IsoValue(1600, Stop.full),
|
||||||
|
IsoValue(2000, Stop.third),
|
||||||
|
IsoValue(2500, Stop.third),
|
||||||
|
IsoValue(3200, Stop.full),
|
||||||
|
IsoValue(4000, Stop.third),
|
||||||
|
IsoValue(5000, Stop.third),
|
||||||
|
IsoValue(6400, Stop.full),
|
||||||
|
];
|
22
lib/models/photography_value.dart
Normal file
22
lib/models/photography_value.dart
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
part 'aperture_value.dart';
|
||||||
|
part 'iso_value.dart';
|
||||||
|
part 'shutter_speed_value.dart';
|
||||||
|
|
||||||
|
enum Stop { full, half, third }
|
||||||
|
|
||||||
|
abstract class PhotographyValue<T> {
|
||||||
|
final T rawValue;
|
||||||
|
final Stop stopType;
|
||||||
|
|
||||||
|
const PhotographyValue(this.rawValue, this.stopType);
|
||||||
|
|
||||||
|
T get value;
|
||||||
|
}
|
||||||
|
|
||||||
|
extension PhotographyValues<T> on List<PhotographyValue<T>> {
|
||||||
|
List<PhotographyValue<T>> fullStops() => where((e) => e.stopType == Stop.full).toList();
|
||||||
|
|
||||||
|
List<PhotographyValue<T>> halfStops() => where((e) => e.stopType == Stop.full || e.stopType == Stop.half).toList();
|
||||||
|
|
||||||
|
List<PhotographyValue<T>> thirdStops() => where((e) => e.stopType == Stop.full || e.stopType == Stop.third).toList();
|
||||||
|
}
|
87
lib/models/shutter_speed_value.dart
Normal file
87
lib/models/shutter_speed_value.dart
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
part of 'photography_value.dart';
|
||||||
|
|
||||||
|
class ShutterSpeedValue extends PhotographyValue<double> {
|
||||||
|
final bool isFraction;
|
||||||
|
|
||||||
|
const ShutterSpeedValue(super.rawValue, this.isFraction, super.stopType);
|
||||||
|
|
||||||
|
@override
|
||||||
|
double get value => isFraction ? 1 / rawValue : rawValue;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
final buffer = StringBuffer();
|
||||||
|
if (isFraction) buffer.write("1/");
|
||||||
|
if (rawValue - rawValue.floor() == 0) {
|
||||||
|
buffer.write(rawValue.toInt().toString());
|
||||||
|
} else {
|
||||||
|
buffer.write(rawValue.toStringAsFixed(1));
|
||||||
|
}
|
||||||
|
if (!isFraction) buffer.write("\"");
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const List<ShutterSpeedValue> shutterSpeedValues = [
|
||||||
|
ShutterSpeedValue(2000, true, Stop.full),
|
||||||
|
ShutterSpeedValue(1600, true, Stop.third),
|
||||||
|
ShutterSpeedValue(1500, true, Stop.half),
|
||||||
|
ShutterSpeedValue(1250, true, Stop.third),
|
||||||
|
ShutterSpeedValue(1000, true, Stop.full),
|
||||||
|
ShutterSpeedValue(800, true, Stop.third),
|
||||||
|
ShutterSpeedValue(750, true, Stop.half),
|
||||||
|
ShutterSpeedValue(640, true, Stop.third),
|
||||||
|
ShutterSpeedValue(500, true, Stop.full),
|
||||||
|
ShutterSpeedValue(400, true, Stop.third),
|
||||||
|
ShutterSpeedValue(350, true, Stop.half),
|
||||||
|
ShutterSpeedValue(320, true, Stop.third),
|
||||||
|
ShutterSpeedValue(250, true, Stop.full),
|
||||||
|
ShutterSpeedValue(200, true, Stop.third),
|
||||||
|
ShutterSpeedValue(180, true, Stop.half),
|
||||||
|
ShutterSpeedValue(160, true, Stop.third),
|
||||||
|
ShutterSpeedValue(125, true, Stop.full),
|
||||||
|
ShutterSpeedValue(100, true, Stop.third),
|
||||||
|
ShutterSpeedValue(90, true, Stop.half),
|
||||||
|
ShutterSpeedValue(80, true, Stop.third),
|
||||||
|
ShutterSpeedValue(60, true, Stop.full),
|
||||||
|
ShutterSpeedValue(50, true, Stop.third),
|
||||||
|
ShutterSpeedValue(45, true, Stop.half),
|
||||||
|
ShutterSpeedValue(40, true, Stop.third),
|
||||||
|
ShutterSpeedValue(30, true, Stop.full),
|
||||||
|
ShutterSpeedValue(25, true, Stop.third),
|
||||||
|
ShutterSpeedValue(20, true, Stop.half),
|
||||||
|
ShutterSpeedValue(20, true, Stop.third),
|
||||||
|
ShutterSpeedValue(15, true, Stop.full),
|
||||||
|
ShutterSpeedValue(13, true, Stop.third),
|
||||||
|
ShutterSpeedValue(10, true, Stop.half),
|
||||||
|
ShutterSpeedValue(10, true, Stop.third),
|
||||||
|
ShutterSpeedValue(8, true, Stop.full),
|
||||||
|
ShutterSpeedValue(6, true, Stop.third),
|
||||||
|
ShutterSpeedValue(6, true, Stop.half),
|
||||||
|
ShutterSpeedValue(5, true, Stop.third),
|
||||||
|
ShutterSpeedValue(4, true, Stop.full),
|
||||||
|
ShutterSpeedValue(3, true, Stop.third),
|
||||||
|
ShutterSpeedValue(3, true, Stop.half),
|
||||||
|
ShutterSpeedValue(2.5, true, Stop.third),
|
||||||
|
ShutterSpeedValue(2, true, Stop.full),
|
||||||
|
ShutterSpeedValue(1.6, true, Stop.third),
|
||||||
|
ShutterSpeedValue(1.5, true, Stop.half),
|
||||||
|
ShutterSpeedValue(1.3, true, Stop.third),
|
||||||
|
ShutterSpeedValue(1, false, Stop.full),
|
||||||
|
ShutterSpeedValue(1.3, false, Stop.third),
|
||||||
|
ShutterSpeedValue(1.5, false, Stop.half),
|
||||||
|
ShutterSpeedValue(1.6, false, Stop.third),
|
||||||
|
ShutterSpeedValue(2, false, Stop.full),
|
||||||
|
ShutterSpeedValue(2.5, false, Stop.third),
|
||||||
|
ShutterSpeedValue(3, false, Stop.half),
|
||||||
|
ShutterSpeedValue(3, false, Stop.third),
|
||||||
|
ShutterSpeedValue(4, false, Stop.full),
|
||||||
|
ShutterSpeedValue(5, false, Stop.third),
|
||||||
|
ShutterSpeedValue(6, false, Stop.half),
|
||||||
|
ShutterSpeedValue(6, false, Stop.third),
|
||||||
|
ShutterSpeedValue(8, false, Stop.full),
|
||||||
|
ShutterSpeedValue(10, false, Stop.third),
|
||||||
|
ShutterSpeedValue(12, false, Stop.half),
|
||||||
|
ShutterSpeedValue(13, false, Stop.third),
|
||||||
|
ShutterSpeedValue(16, false, Stop.full),
|
||||||
|
];
|
|
@ -9,11 +9,15 @@ environment:
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
material_color_utilities: ^0.2.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
google_fonts: ^3.0.1
|
||||||
sdk: flutter
|
|
||||||
flutter_lints: ^2.0.0
|
flutter_lints: ^2.0.0
|
||||||
|
test: ^1.21.6
|
||||||
|
|
||||||
|
dependency_overrides:
|
||||||
|
material_color_utilities: ^0.2.0
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
uses-material-design: true
|
uses-material-design: true
|
||||||
|
|
38
test/photograpy_values_test.dart
Normal file
38
test/photograpy_values_test.dart
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import 'package:lightmeter/models/photography_value.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// Stringify
|
||||||
|
test('Stringify aperture values', () {
|
||||||
|
expect(apertureValues.first.toString(), "f/1.0");
|
||||||
|
expect(apertureValues.last.toString(), "f/45");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Stringify iso values', () {
|
||||||
|
expect(isoValues.first.toString(), "3");
|
||||||
|
expect(isoValues.last.toString(), "6400");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Stringify shutter speed values', () {
|
||||||
|
expect(shutterSpeedValues.first.toString(), "1/2000");
|
||||||
|
expect(shutterSpeedValues.last.toString(), "16\"");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Stops
|
||||||
|
test('Aperture values stops lists', () {
|
||||||
|
expect(apertureValues.fullStops().length, 12);
|
||||||
|
expect(apertureValues.halfStops().length, 12 + 11);
|
||||||
|
expect(apertureValues.thirdStops().length, 12 + 22);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Iso values stops lists', () {
|
||||||
|
expect(isoValues.fullStops().length, 12);
|
||||||
|
expect(isoValues.thirdStops().length, 12 + 22);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Shutter speed values stops lists', () {
|
||||||
|
expect(shutterSpeedValues.fullStops().length, 16);
|
||||||
|
expect(shutterSpeedValues.halfStops().length, 16 + 15);
|
||||||
|
expect(shutterSpeedValues.thirdStops().length, 16 + 30);
|
||||||
|
});
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
// This is a basic Flutter widget test.
|
|
||||||
//
|
|
||||||
// To perform an interaction with a widget in your test, use the WidgetTester
|
|
||||||
// utility in the flutter_test package. For example, you can send tap and scroll
|
|
||||||
// gestures. You can also use WidgetTester to find child widgets in the widget
|
|
||||||
// tree, read text, and verify that the values of widget properties are correct.
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
|
|
||||||
import 'package:lightmeter/main.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
|
||||||
// Build our app and trigger a frame.
|
|
||||||
await tester.pumpWidget(const MyApp());
|
|
||||||
|
|
||||||
// Verify that our counter starts at 0.
|
|
||||||
expect(find.text('0'), findsOneWidget);
|
|
||||||
expect(find.text('1'), findsNothing);
|
|
||||||
|
|
||||||
// Tap the '+' icon and trigger a frame.
|
|
||||||
await tester.tap(find.byIcon(Icons.add));
|
|
||||||
await tester.pump();
|
|
||||||
|
|
||||||
// Verify that our counter has incremented.
|
|
||||||
expect(find.text('0'), findsNothing);
|
|
||||||
expect(find.text('1'), findsOneWidget);
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in a new issue