import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:lightmeter/data/models/photography_values/photography_value.dart'; import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/screens/settings/screen_settings.dart'; import 'components/bottom_controls/widget_bottom_controls.dart'; import 'components/camera/widget_exposure_slider.dart'; import 'components/camera/widget_zoom_camera.dart'; import 'components/exposure_pairs_list/widget_list_exposure_pairs.dart'; import 'components/topbar/widget_topbar.dart'; import 'bloc_metering.dart'; import 'event_metering.dart'; import 'state_metering.dart'; class MeteringScreen extends StatefulWidget { const MeteringScreen({super.key}); @override State createState() => _MeteringScreenState(); } class _MeteringScreenState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); context.read().add(StopTypeChangedEvent(context.watch())); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, body: BlocBuilder( builder: (context, state) { return Stack( children: [ Column( children: [ _topBar(state), Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), child: Row( children: [ Expanded(child: ExposurePairsList(state.exposurePairs)), const SizedBox(width: Dimens.grid8), Expanded( child: Padding( padding: const EdgeInsets.symmetric(vertical: Dimens.paddingM), child: Column( children: const [ Expanded(child: CameraExposureSlider()), SizedBox(height: Dimens.grid24), CameraZoomSlider(), ], ), ), ), ], ), ), ), _bottomBar(), ], ), ], ); }, ), ); } Widget _topBar(MeteringState state) { return MeteringTopBar( fastest: state.fastest, slowest: state.slowest, ev: state.ev, iso: state.iso, nd: state.nd, onIsoChanged: (value) => context.read().add(IsoChangedEvent(value)), onNdChanged: (value) => context.read().add(NdChangedEvent(value)), ); } Widget _bottomBar() { return MeteringBottomControls( onSourceChanged: () {}, onMeasure: () => context.read().add(const MeasureEvent()), onSettings: () { Navigator.push(context, MaterialPageRoute(builder: (context) => const SettingsScreen())); }, ); } }