diff --git a/integration_test/e2e_test.dart b/integration_test/e2e_test.dart index fc2cfc0..97022f1 100644 --- a/integration_test/e2e_test.dart +++ b/integration_test/e2e_test.dart @@ -136,8 +136,8 @@ void testE2E(String description) { ); /// Set another film and another ISO - await tester.openPickerAndSelect('200'); await tester.openPickerAndSelect(mockFilms[1].name); + await tester.openPickerAndSelect('200'); await _expectMeteringStateAndMeasure( tester, equipmentProfile: mockEquipmentProfiles[1], diff --git a/lib/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart b/lib/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart index 1701282..65a73b5 100644 --- a/lib/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart +++ b/lib/screens/metering/components/shared/readings_container/components/equipment_profile_picker/widget_picker_equipment_profiles.dart @@ -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 createState() => _EquipmentProfilePickerState(); -} - -class _EquipmentProfilePickerState extends State { - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final profile = EquipmentProfiles.selectedOf(context); - context.read().add(EquipmentProfileChangedEvent(profile)); - } - @override Widget build(BuildContext context) { return AnimatedDialogPicker( @@ -31,10 +16,7 @@ class _EquipmentProfilePickerState extends State { 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().add(EquipmentProfileChangedEvent(profile)); - }, + onChanged: EquipmentProfilesProvider.of(context).selectProfile, closedChild: ReadingValueContainer.singleValue( value: ReadingValue( label: S.of(context).equipmentProfile, diff --git a/lib/screens/metering/screen_metering.dart b/lib/screens/metering/screen_metering.dart index 417d330..4f81e4a 100644 --- a/lib/screens/metering/screen_metering.dart +++ b/lib/screens/metering/screen_metering.dart @@ -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().add(EquipmentProfileChangedEvent(value)); + context.read().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().add(IsoChangedEvent(isoValue)); + } + } + }, + child: child, + ), ); } } diff --git a/lib/screens/metering/utils/listener_films.dart b/lib/screens/metering/utils/listener_films.dart new file mode 100644 index 0000000..a9c6e8d --- /dev/null +++ b/lib/screens/metering/utils/listener_films.dart @@ -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 onDidChangeDependencies; + final Widget child; + + const FilmListener({ + required this.onDidChangeDependencies, + required this.child, + super.key, + }); + + @override + State createState() => _FilmListenerState(); +} + +class _FilmListenerState extends State { + @override + void didChangeDependencies() { + super.didChangeDependencies(); + widget.onDidChangeDependencies(Films.selectedOf(context)); + } + + @override + Widget build(BuildContext context) { + return widget.child; + } +}