m3_lightmeter/lib/screens/timer/flow_timer.dart

68 lines
2.4 KiB
Dart
Raw Normal View History

2024-04-30 14:32:01 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
2024-05-02 15:11:53 +00:00
import 'package:lightmeter/data/models/exposure_pair.dart';
2024-04-30 14:32:01 +00:00
import 'package:lightmeter/interactors/metering_interactor.dart';
import 'package:lightmeter/providers/services_provider.dart';
2024-04-30 20:45:46 +00:00
import 'package:lightmeter/res/dimens.dart';
2024-04-30 19:50:09 +00:00
import 'package:lightmeter/screens/timer/bloc_timer.dart';
2024-04-30 14:32:01 +00:00
import 'package:lightmeter/screens/timer/screen_timer.dart';
class TimerFlow extends StatelessWidget {
2024-05-02 15:11:53 +00:00
final ExposurePair exposurePair;
2024-05-03 08:50:35 +00:00
late final _duration =
Duration(milliseconds: (exposurePair.shutterSpeed.value * Duration.millisecondsPerSecond).toInt());
2024-05-02 15:11:53 +00:00
2024-05-03 08:50:35 +00:00
TimerFlow({required this.exposurePair, super.key});
2024-04-30 14:32:01 +00:00
@override
Widget build(BuildContext context) {
2024-04-30 20:45:46 +00:00
final scheme = Theme.of(context).colorScheme;
return IconButtonTheme(
data: IconButtonThemeData(
style: ButtonStyle(
backgroundColor: MaterialStatePropertyAll(scheme.surface),
elevation: const MaterialStatePropertyAll(4),
iconColor: MaterialStatePropertyAll(scheme.onSurface),
shadowColor: const MaterialStatePropertyAll(Colors.transparent),
surfaceTintColor: MaterialStatePropertyAll(scheme.surfaceTint),
fixedSize: const MaterialStatePropertyAll(Size(Dimens.grid48, Dimens.grid48)),
2024-04-30 19:50:09 +00:00
),
2024-04-30 20:45:46 +00:00
),
child: MeteringInteractorProvider(
data: MeteringInteractor(
ServicesProvider.of(context).userPreferencesService,
ServicesProvider.of(context).caffeineService,
ServicesProvider.of(context).hapticsService,
ServicesProvider.of(context).permissionsService,
ServicesProvider.of(context).lightSensorService,
ServicesProvider.of(context).volumeEventsService,
)..initialize(),
child: BlocProvider(
create: (context) => TimerBloc(
MeteringInteractorProvider.of(context),
2024-05-03 08:50:35 +00:00
_duration,
2024-04-30 20:45:46 +00:00
),
2024-05-02 15:11:53 +00:00
child: TimerScreen(exposurePair: exposurePair),
2024-04-30 19:57:02 +00:00
),
2024-04-30 14:32:01 +00:00
),
);
}
}
class MeteringInteractorProvider extends InheritedWidget {
final MeteringInteractor data;
const MeteringInteractorProvider({
required this.data,
required super.child,
super.key,
});
static MeteringInteractor of(BuildContext context) {
return context.findAncestorWidgetOfExactType<MeteringInteractorProvider>()!.data;
}
@override
bool updateShouldNotify(MeteringInteractorProvider oldWidget) => false;
}