2023-01-29 16:57:47 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:lightmeter/data/models/ev_source_type.dart';
|
|
|
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
|
|
|
import 'package:lightmeter/environment.dart';
|
2023-06-04 11:04:04 +00:00
|
|
|
import 'package:lightmeter/utils/inherited_generics.dart';
|
2023-01-29 16:57:47 +00:00
|
|
|
|
|
|
|
class EvSourceTypeProvider extends StatefulWidget {
|
|
|
|
final Widget child;
|
|
|
|
|
|
|
|
const EvSourceTypeProvider({required this.child, super.key});
|
|
|
|
|
|
|
|
static EvSourceTypeProviderState of(BuildContext context) {
|
|
|
|
return context.findAncestorStateOfType<EvSourceTypeProviderState>()!;
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
State<EvSourceTypeProvider> createState() => EvSourceTypeProviderState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class EvSourceTypeProviderState extends State<EvSourceTypeProvider> {
|
|
|
|
late final ValueNotifier<EvSourceType> valueListenable;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
2023-06-04 11:04:04 +00:00
|
|
|
final evSourceType = context.get<UserPreferencesService>().evSourceType;
|
2023-01-29 16:57:47 +00:00
|
|
|
valueListenable = ValueNotifier(
|
2023-06-04 11:04:04 +00:00
|
|
|
evSourceType == EvSourceType.sensor && !context.get<Environment>().hasLightSensor
|
2023-01-29 16:57:47 +00:00
|
|
|
? EvSourceType.camera
|
|
|
|
: evSourceType,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void dispose() {
|
|
|
|
valueListenable.dispose();
|
|
|
|
super.dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return ValueListenableBuilder(
|
|
|
|
valueListenable: valueListenable,
|
2023-06-04 11:04:04 +00:00
|
|
|
builder: (_, value, child) => InheritedWidgetBase<EvSourceType>(
|
|
|
|
data: value,
|
|
|
|
child: child!,
|
2023-01-29 16:57:47 +00:00
|
|
|
),
|
|
|
|
child: widget.child,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
void toggleType() {
|
|
|
|
switch (valueListenable.value) {
|
|
|
|
case EvSourceType.camera:
|
2023-06-04 11:04:04 +00:00
|
|
|
if (context.get<Environment>().hasLightSensor) {
|
2023-01-29 16:57:47 +00:00
|
|
|
valueListenable.value = EvSourceType.sensor;
|
|
|
|
}
|
|
|
|
case EvSourceType.sensor:
|
|
|
|
valueListenable.value = EvSourceType.camera;
|
|
|
|
}
|
2023-06-04 11:04:04 +00:00
|
|
|
context.get<UserPreferencesService>().evSourceType = valueListenable.value;
|
2023-01-29 16:57:47 +00:00
|
|
|
}
|
|
|
|
}
|