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;
|
|
|
|
|
|
|
|
const 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-02 15:11:53 +00:00
|
|
|
exposurePair.shutterSpeed.value.toInt(),
|
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;
|
|
|
|
}
|