ML-260 Set ISO when selecting a film (#267)

* set ISO according to film

* remove unnecessary equipment profile listeners

* Update e2e_test.dart
This commit is contained in:
Vadim 2025-08-28 19:27:52 +02:00 committed by GitHub
parent 9cece036d1
commit 78f4bf96ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 50 additions and 22 deletions

View file

@ -136,8 +136,8 @@ void testE2E(String description) {
);
/// Set another film and another ISO
await tester.openPickerAndSelect<IsoValuePicker, IsoValue>('200');
await tester.openPickerAndSelect<FilmPicker, Film>(mockFilms[1].name);
await tester.openPickerAndSelect<IsoValuePicker, IsoValue>('200');
await _expectMeteringStateAndMeasure(
tester,
equipmentProfile: mockEquipmentProfiles[1],

View file

@ -1,28 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:lightmeter/generated/l10n.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/reading_value_container/widget_container_reading_value.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
class EquipmentProfilePicker extends StatefulWidget {
class EquipmentProfilePicker extends StatelessWidget {
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
Widget build(BuildContext context) {
return AnimatedDialogPicker<EquipmentProfile>(
@ -31,10 +16,7 @@ class _EquipmentProfilePickerState extends State<EquipmentProfilePicker> {
selectedValue: EquipmentProfiles.selectedOf(context),
values: EquipmentProfiles.inUseOf(context),
itemTitleBuilder: (_, value) => Text(value.id.isEmpty ? S.of(context).none : value.name),
onChanged: (profile) {
EquipmentProfilesProvider.of(context).selectProfile(profile);
context.read<MeteringCommunicationBloc>().add(EquipmentProfileChangedEvent(profile));
},
onChanged: EquipmentProfilesProvider.of(context).selectProfile,
closedChild: ReadingValueContainer.singleValue(
value: ReadingValue(
label: S.of(context).equipmentProfile,

View file

@ -1,5 +1,6 @@
import 'dart:math';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:lightmeter/data/models/ev_source_type.dart';
@ -9,12 +10,15 @@ import 'package:lightmeter/providers/equipment_profile_provider.dart';
import 'package:lightmeter/providers/services_provider.dart';
import 'package:lightmeter/providers/user_preferences_provider.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/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/event_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_films.dart';
import 'package:lightmeter/screens/timer/flow_timer.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
@ -91,8 +95,20 @@ class _InheritedListeners extends StatelessWidget {
return EquipmentProfileListener(
onDidChangeDependencies: (value) {
context.read<MeteringBloc>().add(EquipmentProfileChangedEvent(value));
context.read<MeteringCommunicationBloc>().add(communication_event.EquipmentProfileChangedEvent(value));
},
child: child,
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,
),
);
}
}

View file

@ -0,0 +1,30 @@
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;
}
}