diff --git a/lib/screens/metering/screen_metering.dart b/lib/screens/metering/screen_metering.dart index f05ca9c..134d789 100644 --- a/lib/screens/metering/screen_metering.dart +++ b/lib/screens/metering/screen_metering.dart @@ -30,24 +30,16 @@ class MeteringScreen extends StatelessWidget { children: [ Expanded( child: BlocBuilder( - builder: (_, state) { - final exposurePairs = state is MeteringDataState && state.ev != null - ? buildExposureValues(context, state.ev!, state.film) - : []; - return _MeteringContainerBuidler( - fastest: exposurePairs.isNotEmpty ? exposurePairs.first : null, - slowest: exposurePairs.isNotEmpty ? exposurePairs.last : null, - exposurePairs: exposurePairs, - film: state.film, - iso: state.iso, - nd: state.nd, - onFilmChanged: (value) => - context.read().add(FilmChangedEvent(value)), - onIsoChanged: (value) => - context.read().add(IsoChangedEvent(value)), - onNdChanged: (value) => context.read().add(NdChangedEvent(value)), - ); - }, + builder: (_, state) => _MeteringContainerBuidler( + ev: state is MeteringDataState ? state.ev : null, + film: state.film, + iso: state.iso, + nd: state.nd, + onFilmChanged: (value) => + context.read().add(FilmChangedEvent(value)), + onIsoChanged: (value) => context.read().add(IsoChangedEvent(value)), + onNdChanged: (value) => context.read().add(NdChangedEvent(value)), + ), ), ), BlocBuilder( @@ -66,6 +58,78 @@ class MeteringScreen extends StatelessWidget { ), ); } +} + +class _InheritedListeners extends StatelessWidget { + final Widget child; + + const _InheritedListeners({required this.child}); + + @override + Widget build(BuildContext context) { + return InheritedWidgetListener( + onDidChangeDependencies: (value) { + context.read().add(EquipmentProfileChangedEvent(value)); + }, + child: InheritedModelAspectListener( + aspect: MeteringScreenLayoutFeature.filmPicker, + onDidChangeDependencies: (value) { + if (!value) context.read().add(const FilmChangedEvent(Film.other())); + }, + child: child, + ), + ); + } +} + +class _MeteringContainerBuidler extends StatelessWidget { + final double? ev; + final Film film; + final IsoValue iso; + final NdValue nd; + final ValueChanged onFilmChanged; + final ValueChanged onIsoChanged; + final ValueChanged onNdChanged; + + const _MeteringContainerBuidler({ + required this.ev, + required this.film, + required this.iso, + required this.nd, + required this.onFilmChanged, + required this.onIsoChanged, + required this.onNdChanged, + }); + + @override + Widget build(BuildContext context) { + final exposurePairs = ev != null ? buildExposureValues(context, ev!, film) : []; + final fastest = exposurePairs.isNotEmpty ? exposurePairs.first : null; + final slowest = exposurePairs.isNotEmpty ? exposurePairs.last : null; + return context.listen() == EvSourceType.camera + ? CameraContainerProvider( + fastest: fastest, + slowest: slowest, + film: film, + iso: iso, + nd: nd, + onFilmChanged: onFilmChanged, + onIsoChanged: onIsoChanged, + onNdChanged: onNdChanged, + exposurePairs: exposurePairs, + ) + : LightSensorContainerProvider( + fastest: fastest, + slowest: slowest, + film: film, + iso: iso, + nd: nd, + onFilmChanged: onFilmChanged, + onIsoChanged: onIsoChanged, + onNdChanged: onNdChanged, + exposurePairs: exposurePairs, + ); + } List buildExposureValues(BuildContext context, double ev, Film film) { if (ev.isNaN || ev.isInfinite) { @@ -131,76 +195,3 @@ class MeteringScreen extends StatelessWidget { ); } } - -class _InheritedListeners extends StatelessWidget { - final Widget child; - - const _InheritedListeners({required this.child}); - - @override - Widget build(BuildContext context) { - return InheritedWidgetListener( - onDidChangeDependencies: (value) { - context.read().add(EquipmentProfileChangedEvent(value)); - }, - child: InheritedModelAspectListener( - aspect: MeteringScreenLayoutFeature.filmPicker, - onDidChangeDependencies: (value) { - if (!value) context.read().add(const FilmChangedEvent(Film.other())); - }, - child: child, - ), - ); - } -} - -class _MeteringContainerBuidler extends StatelessWidget { - final ExposurePair? fastest; - final ExposurePair? slowest; - final Film film; - final IsoValue iso; - final NdValue nd; - final ValueChanged onFilmChanged; - final ValueChanged onIsoChanged; - final ValueChanged onNdChanged; - final List exposurePairs; - - const _MeteringContainerBuidler({ - required this.fastest, - required this.slowest, - required this.film, - required this.iso, - required this.nd, - required this.onFilmChanged, - required this.onIsoChanged, - required this.onNdChanged, - required this.exposurePairs, - }); - - @override - Widget build(BuildContext context) { - return context.listen() == EvSourceType.camera - ? CameraContainerProvider( - fastest: fastest, - slowest: slowest, - film: film, - iso: iso, - nd: nd, - onFilmChanged: onFilmChanged, - onIsoChanged: onIsoChanged, - onNdChanged: onNdChanged, - exposurePairs: exposurePairs, - ) - : LightSensorContainerProvider( - fastest: fastest, - slowest: slowest, - film: film, - iso: iso, - nd: nd, - onFilmChanged: onFilmChanged, - onIsoChanged: onIsoChanged, - onNdChanged: onNdChanged, - exposurePairs: exposurePairs, - ); - } -}