mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-09-18 19:06:41 +00:00
Compare commits
No commits in common. "49d0a2175fe75c6706ee4ff32670356a56a1efd7" and "9cece036d16eff3527a611719065013f1486e8f5" have entirely different histories.
49d0a2175f
...
9cece036d1
5 changed files with 23 additions and 53 deletions
|
@ -136,8 +136,8 @@ void testE2E(String description) {
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Set another film and another ISO
|
/// Set another film and another ISO
|
||||||
await tester.openPickerAndSelect<FilmPicker, Film>(mockFilms[1].name);
|
|
||||||
await tester.openPickerAndSelect<IsoValuePicker, IsoValue>('200');
|
await tester.openPickerAndSelect<IsoValuePicker, IsoValue>('200');
|
||||||
|
await tester.openPickerAndSelect<FilmPicker, Film>(mockFilms[1].name);
|
||||||
await _expectMeteringStateAndMeasure(
|
await _expectMeteringStateAndMeasure(
|
||||||
tester,
|
tester,
|
||||||
equipmentProfile: mockEquipmentProfiles[1],
|
equipmentProfile: mockEquipmentProfiles[1],
|
||||||
|
|
|
@ -35,9 +35,7 @@ class PickerListTile<T> extends StatelessWidget {
|
||||||
title: title,
|
title: title,
|
||||||
selectedValue: Optional(selectedValue),
|
selectedValue: Optional(selectedValue),
|
||||||
values: [
|
values: [
|
||||||
/// `const Optional(null)` for some reason is not equal to a non-const `Optional(null)`
|
const Optional(null),
|
||||||
// ignore: prefer_const_constructors
|
|
||||||
Optional(null),
|
|
||||||
...values.toSet().map((e) => Optional(e)),
|
...values.toSet().map((e) => Optional(e)),
|
||||||
],
|
],
|
||||||
titleAdapter: (context, value) => _titleAdapter(context, value.value),
|
titleAdapter: (context, value) => _titleAdapter(context, value.value),
|
||||||
|
|
|
@ -1,13 +1,28 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
import 'package:lightmeter/providers/equipment_profile_provider.dart';
|
import 'package:lightmeter/providers/equipment_profile_provider.dart';
|
||||||
|
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
|
||||||
|
import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/widget_picker_dialog_animated.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/widget_picker_dialog_animated.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/shared/reading_value_container/widget_container_reading_value.dart';
|
import 'package:lightmeter/screens/metering/components/shared/readings_container/components/shared/reading_value_container/widget_container_reading_value.dart';
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
class EquipmentProfilePicker extends StatelessWidget {
|
class EquipmentProfilePicker extends StatefulWidget {
|
||||||
const EquipmentProfilePicker();
|
const EquipmentProfilePicker();
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<EquipmentProfilePicker> createState() => _EquipmentProfilePickerState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EquipmentProfilePickerState extends State<EquipmentProfilePicker> {
|
||||||
|
@override
|
||||||
|
void didChangeDependencies() {
|
||||||
|
super.didChangeDependencies();
|
||||||
|
final profile = EquipmentProfiles.selectedOf(context);
|
||||||
|
context.read<MeteringCommunicationBloc>().add(EquipmentProfileChangedEvent(profile));
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return AnimatedDialogPicker<EquipmentProfile>(
|
return AnimatedDialogPicker<EquipmentProfile>(
|
||||||
|
@ -16,7 +31,10 @@ class EquipmentProfilePicker extends StatelessWidget {
|
||||||
selectedValue: EquipmentProfiles.selectedOf(context),
|
selectedValue: EquipmentProfiles.selectedOf(context),
|
||||||
values: EquipmentProfiles.inUseOf(context),
|
values: EquipmentProfiles.inUseOf(context),
|
||||||
itemTitleBuilder: (_, value) => Text(value.id.isEmpty ? S.of(context).none : value.name),
|
itemTitleBuilder: (_, value) => Text(value.id.isEmpty ? S.of(context).none : value.name),
|
||||||
onChanged: EquipmentProfilesProvider.of(context).selectProfile,
|
onChanged: (profile) {
|
||||||
|
EquipmentProfilesProvider.of(context).selectProfile(profile);
|
||||||
|
context.read<MeteringCommunicationBloc>().add(EquipmentProfileChangedEvent(profile));
|
||||||
|
},
|
||||||
closedChild: ReadingValueContainer.singleValue(
|
closedChild: ReadingValueContainer.singleValue(
|
||||||
value: ReadingValue(
|
value: ReadingValue(
|
||||||
label: S.of(context).equipmentProfile,
|
label: S.of(context).equipmentProfile,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:collection/collection.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:lightmeter/data/models/ev_source_type.dart';
|
import 'package:lightmeter/data/models/ev_source_type.dart';
|
||||||
|
@ -10,15 +9,12 @@ import 'package:lightmeter/providers/equipment_profile_provider.dart';
|
||||||
import 'package:lightmeter/providers/services_provider.dart';
|
import 'package:lightmeter/providers/services_provider.dart';
|
||||||
import 'package:lightmeter/providers/user_preferences_provider.dart';
|
import 'package:lightmeter/providers/user_preferences_provider.dart';
|
||||||
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
|
|
||||||
import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart' as communication_event;
|
|
||||||
import 'package:lightmeter/screens/metering/components/bottom_controls/widget_bottom_controls.dart';
|
import 'package:lightmeter/screens/metering/components/bottom_controls/widget_bottom_controls.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/camera_container/provider_container_camera.dart';
|
import 'package:lightmeter/screens/metering/components/camera_container/provider_container_camera.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/light_sensor_container/provider_container_light_sensor.dart';
|
import 'package:lightmeter/screens/metering/components/light_sensor_container/provider_container_light_sensor.dart';
|
||||||
import 'package:lightmeter/screens/metering/event_metering.dart';
|
import 'package:lightmeter/screens/metering/event_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/state_metering.dart';
|
import 'package:lightmeter/screens/metering/state_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/utils/listener_equipment_profiles.dart';
|
import 'package:lightmeter/screens/metering/utils/listener_equipment_profiles.dart';
|
||||||
import 'package:lightmeter/screens/metering/utils/listener_films.dart';
|
|
||||||
import 'package:lightmeter/screens/timer/flow_timer.dart';
|
import 'package:lightmeter/screens/timer/flow_timer.dart';
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
|
@ -95,20 +91,8 @@ class _InheritedListeners extends StatelessWidget {
|
||||||
return EquipmentProfileListener(
|
return EquipmentProfileListener(
|
||||||
onDidChangeDependencies: (value) {
|
onDidChangeDependencies: (value) {
|
||||||
context.read<MeteringBloc>().add(EquipmentProfileChangedEvent(value));
|
context.read<MeteringBloc>().add(EquipmentProfileChangedEvent(value));
|
||||||
context.read<MeteringCommunicationBloc>().add(communication_event.EquipmentProfileChangedEvent(value));
|
|
||||||
},
|
|
||||||
child: FilmListener(
|
|
||||||
onDidChangeDependencies: (value) {
|
|
||||||
/// Do nothing if no film selected
|
|
||||||
if (value != const FilmStub()) {
|
|
||||||
final isoValue = IsoValue.values.firstWhereOrNull((e) => e.rawValue == value.iso);
|
|
||||||
if (isoValue case final isoValue?) {
|
|
||||||
context.read<MeteringBloc>().add(IsoChangedEvent(isoValue));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
child: child,
|
child: child,
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:lightmeter/providers/films_provider.dart';
|
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
|
||||||
|
|
||||||
class FilmListener extends StatefulWidget {
|
|
||||||
final ValueChanged<Film> onDidChangeDependencies;
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
const FilmListener({
|
|
||||||
required this.onDidChangeDependencies,
|
|
||||||
required this.child,
|
|
||||||
super.key,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<FilmListener> createState() => _FilmListenerState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _FilmListenerState extends State<FilmListener> {
|
|
||||||
@override
|
|
||||||
void didChangeDependencies() {
|
|
||||||
super.didChangeDependencies();
|
|
||||||
widget.onDidChangeDependencies(Films.selectedOf(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return widget.child;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue