mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-03-12 05:10:41 +00:00
Added EnumProviders
widget for enum values
This commit is contained in:
parent
0c58597a8e
commit
c8c96b851e
12 changed files with 203 additions and 215 deletions
|
@ -5,6 +5,7 @@ import 'package:lightmeter/data/models/supported_locale.dart';
|
||||||
import 'package:lightmeter/environment.dart';
|
import 'package:lightmeter/environment.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
import 'package:lightmeter/providers.dart';
|
import 'package:lightmeter/providers.dart';
|
||||||
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/screens/metering/flow_metering.dart';
|
import 'package:lightmeter/screens/metering/flow_metering.dart';
|
||||||
import 'package:lightmeter/screens/settings/flow_settings.dart';
|
import 'package:lightmeter/screens/settings/flow_settings.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
import 'package:lightmeter/utils/inherited_generics.dart';
|
||||||
|
@ -22,7 +23,7 @@ class Application extends StatelessWidget {
|
||||||
? _AnnotatedRegionWrapper(
|
? _AnnotatedRegionWrapper(
|
||||||
child: MaterialApp(
|
child: MaterialApp(
|
||||||
theme: context.listen<ThemeData>(),
|
theme: context.listen<ThemeData>(),
|
||||||
locale: Locale(context.listen<SupportedLocale>().intlName),
|
locale: Locale(EnumProviders.localeOf(context).intlName),
|
||||||
localizationsDelegates: const [
|
localizationsDelegates: const [
|
||||||
S.delegate,
|
S.delegate,
|
||||||
GlobalMaterialLocalizations.delegate,
|
GlobalMaterialLocalizations.delegate,
|
||||||
|
|
|
@ -6,12 +6,10 @@ import 'package:lightmeter/data/permissions_service.dart';
|
||||||
import 'package:lightmeter/data/shared_prefs_service.dart';
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
||||||
import 'package:lightmeter/data/volume_events_service.dart';
|
import 'package:lightmeter/data/volume_events_service.dart';
|
||||||
import 'package:lightmeter/environment.dart';
|
import 'package:lightmeter/environment.dart';
|
||||||
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/providers/equipment_profile_provider.dart';
|
import 'package:lightmeter/providers/equipment_profile_provider.dart';
|
||||||
import 'package:lightmeter/providers/ev_source_type_provider.dart';
|
|
||||||
import 'package:lightmeter/providers/metering_screen_layout_provider.dart';
|
import 'package:lightmeter/providers/metering_screen_layout_provider.dart';
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
import 'package:lightmeter/providers/service_providers.dart';
|
||||||
import 'package:lightmeter/providers/stop_type_provider.dart';
|
|
||||||
import 'package:lightmeter/providers/supported_locale_provider.dart';
|
|
||||||
import 'package:lightmeter/providers/theme_provider.dart';
|
import 'package:lightmeter/providers/theme_provider.dart';
|
||||||
import 'package:platform/platform.dart';
|
import 'package:platform/platform.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
@ -39,11 +37,9 @@ class LightmeterProviders extends StatelessWidget {
|
||||||
permissionsService: const PermissionsService(),
|
permissionsService: const PermissionsService(),
|
||||||
userPreferencesService: UserPreferencesService(snapshot.data![0] as SharedPreferences),
|
userPreferencesService: UserPreferencesService(snapshot.data![0] as SharedPreferences),
|
||||||
volumeEventsService: const VolumeEventsService(LocalPlatform()),
|
volumeEventsService: const VolumeEventsService(LocalPlatform()),
|
||||||
|
child: EnumProviders(
|
||||||
child: MeteringScreenLayoutProvider(
|
child: MeteringScreenLayoutProvider(
|
||||||
child: StopTypeProvider(
|
|
||||||
child: EquipmentProfileProvider(
|
child: EquipmentProfileProvider(
|
||||||
child: EvSourceTypeProvider(
|
|
||||||
child: SupportedLocaleProvider(
|
|
||||||
child: ThemeProvider(
|
child: ThemeProvider(
|
||||||
child: Builder(
|
child: Builder(
|
||||||
builder: (context) => builder(context, true),
|
builder: (context) => builder(context, true),
|
||||||
|
@ -52,8 +48,6 @@ class LightmeterProviders extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
} else if (snapshot.error != null) {
|
} else if (snapshot.error != null) {
|
||||||
return Center(child: Text(snapshot.error!.toString()));
|
return Center(child: Text(snapshot.error!.toString()));
|
||||||
|
|
164
lib/providers/enum_providers.dart
Normal file
164
lib/providers/enum_providers.dart
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:lightmeter/data/models/ev_source_type.dart';
|
||||||
|
import 'package:lightmeter/data/models/supported_locale.dart';
|
||||||
|
import 'package:lightmeter/data/models/theme_type.dart';
|
||||||
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
||||||
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
|
import 'package:lightmeter/providers/service_providers.dart';
|
||||||
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
|
enum _ListenableAspect {
|
||||||
|
evSourceType,
|
||||||
|
locale,
|
||||||
|
stopType,
|
||||||
|
themeType,
|
||||||
|
}
|
||||||
|
|
||||||
|
class EnumProviders extends StatefulWidget {
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const EnumProviders({required this.child, super.key});
|
||||||
|
|
||||||
|
static _EnumProvidersState of(BuildContext context) {
|
||||||
|
return context.findAncestorStateOfType<_EnumProvidersState>()!;
|
||||||
|
}
|
||||||
|
|
||||||
|
static EvSourceType evSourceTypeOf(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<_EnumProvidersModel>(
|
||||||
|
context,
|
||||||
|
aspect: _ListenableAspect.evSourceType,
|
||||||
|
)!
|
||||||
|
.evSourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SupportedLocale localeOf(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<_EnumProvidersModel>(
|
||||||
|
context,
|
||||||
|
aspect: _ListenableAspect.locale,
|
||||||
|
)!
|
||||||
|
.locale;
|
||||||
|
}
|
||||||
|
|
||||||
|
static StopType stopTypeOf(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<_EnumProvidersModel>(
|
||||||
|
context,
|
||||||
|
aspect: _ListenableAspect.stopType,
|
||||||
|
)!
|
||||||
|
.stopType;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ThemeType themeTypeOf(BuildContext context) {
|
||||||
|
return InheritedModel.inheritFrom<_EnumProvidersModel>(
|
||||||
|
context,
|
||||||
|
aspect: _ListenableAspect.themeType,
|
||||||
|
)!
|
||||||
|
.themeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<EnumProviders> createState() => _EnumProvidersState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EnumProvidersState extends State<EnumProviders> {
|
||||||
|
UserPreferencesService get userPreferencesService =>
|
||||||
|
ServiceProviders.userPreferencesServiceOf(context);
|
||||||
|
|
||||||
|
late EvSourceType evSourceType;
|
||||||
|
late StopType stopType = userPreferencesService.stopType;
|
||||||
|
late SupportedLocale locale = userPreferencesService.locale;
|
||||||
|
late ThemeType themeType = userPreferencesService.themeType;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
evSourceType = ServiceProviders.userPreferencesServiceOf(context).evSourceType;
|
||||||
|
evSourceType = evSourceType == EvSourceType.sensor &&
|
||||||
|
!ServiceProviders.environmentOf(context).hasLightSensor
|
||||||
|
? EvSourceType.camera
|
||||||
|
: evSourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return _EnumProvidersModel(
|
||||||
|
evSourceType: evSourceType,
|
||||||
|
locale: locale,
|
||||||
|
stopType: stopType,
|
||||||
|
themeType: themeType,
|
||||||
|
child: widget.child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void toggleEvSourceType() {
|
||||||
|
if (!ServiceProviders.environmentOf(context).hasLightSensor) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setState(() {
|
||||||
|
switch (evSourceType) {
|
||||||
|
case EvSourceType.camera:
|
||||||
|
evSourceType = EvSourceType.sensor;
|
||||||
|
case EvSourceType.sensor:
|
||||||
|
evSourceType = EvSourceType.camera;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ServiceProviders.userPreferencesServiceOf(context).evSourceType = evSourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setLocale(SupportedLocale locale) {
|
||||||
|
S.load(Locale(locale.intlName)).then((value) {
|
||||||
|
setState(() {
|
||||||
|
this.locale = locale;
|
||||||
|
});
|
||||||
|
ServiceProviders.userPreferencesServiceOf(context).locale = locale;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void setStopType(StopType stopType) {
|
||||||
|
setState(() {
|
||||||
|
this.stopType = stopType;
|
||||||
|
});
|
||||||
|
ServiceProviders.userPreferencesServiceOf(context).stopType = stopType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setThemeType(ThemeType themeType) {
|
||||||
|
setState(() {
|
||||||
|
this.themeType = themeType;
|
||||||
|
});
|
||||||
|
ServiceProviders.userPreferencesServiceOf(context).themeType = themeType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EnumProvidersModel extends InheritedModel<_ListenableAspect> {
|
||||||
|
final EvSourceType evSourceType;
|
||||||
|
final SupportedLocale locale;
|
||||||
|
final StopType stopType;
|
||||||
|
final ThemeType themeType;
|
||||||
|
|
||||||
|
const _EnumProvidersModel({
|
||||||
|
required this.evSourceType,
|
||||||
|
required this.locale,
|
||||||
|
required this.stopType,
|
||||||
|
required this.themeType,
|
||||||
|
required super.child,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool updateShouldNotify(_EnumProvidersModel oldWidget) {
|
||||||
|
return evSourceType != oldWidget.evSourceType ||
|
||||||
|
locale != oldWidget.locale ||
|
||||||
|
stopType != oldWidget.stopType ||
|
||||||
|
themeType != oldWidget.themeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool updateShouldNotifyDependent(
|
||||||
|
_EnumProvidersModel oldWidget,
|
||||||
|
Set<_ListenableAspect> dependencies,
|
||||||
|
) {
|
||||||
|
return (evSourceType != oldWidget.evSourceType &&
|
||||||
|
dependencies.contains(_ListenableAspect.evSourceType)) ||
|
||||||
|
(locale != oldWidget.locale && dependencies.contains(_ListenableAspect.locale)) ||
|
||||||
|
(stopType != oldWidget.stopType && dependencies.contains(_ListenableAspect.stopType)) ||
|
||||||
|
(themeType != oldWidget.themeType && dependencies.contains(_ListenableAspect.themeType));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,62 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:lightmeter/data/models/ev_source_type.dart';
|
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
|
|
||||||
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();
|
|
||||||
final evSourceType = ServiceProviders.userPreferencesServiceOf(context).evSourceType;
|
|
||||||
valueListenable = ValueNotifier(
|
|
||||||
evSourceType == EvSourceType.sensor && !ServiceProviders.environmentOf(context).hasLightSensor
|
|
||||||
? EvSourceType.camera
|
|
||||||
: evSourceType,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
valueListenable.dispose();
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return ValueListenableBuilder(
|
|
||||||
valueListenable: valueListenable,
|
|
||||||
builder: (_, value, child) => InheritedWidgetBase<EvSourceType>(
|
|
||||||
data: value,
|
|
||||||
child: child!,
|
|
||||||
),
|
|
||||||
child: widget.child,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void toggleType() {
|
|
||||||
switch (valueListenable.value) {
|
|
||||||
case EvSourceType.camera:
|
|
||||||
if (ServiceProviders.environmentOf(context).hasLightSensor) {
|
|
||||||
valueListenable.value = EvSourceType.sensor;
|
|
||||||
}
|
|
||||||
case EvSourceType.sensor:
|
|
||||||
valueListenable.value = EvSourceType.camera;
|
|
||||||
}
|
|
||||||
ServiceProviders.userPreferencesServiceOf(context).evSourceType = valueListenable.value;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
|
||||||
|
|
||||||
class StopTypeProvider extends StatefulWidget {
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
const StopTypeProvider({required this.child, super.key});
|
|
||||||
|
|
||||||
static StopTypeProviderState of(BuildContext context) {
|
|
||||||
return context.findAncestorStateOfType<StopTypeProviderState>()!;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<StopTypeProvider> createState() => StopTypeProviderState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class StopTypeProviderState extends State<StopTypeProvider> {
|
|
||||||
late StopType _stopType;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
_stopType = ServiceProviders.userPreferencesServiceOf(context).stopType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return InheritedWidgetBase<StopType>(
|
|
||||||
data: _stopType,
|
|
||||||
child: widget.child,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set(StopType type) {
|
|
||||||
setState(() {
|
|
||||||
_stopType = type;
|
|
||||||
});
|
|
||||||
ServiceProviders.userPreferencesServiceOf(context).stopType = type;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:lightmeter/data/models/supported_locale.dart';
|
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
|
|
||||||
class SupportedLocaleProvider extends StatefulWidget {
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
const SupportedLocaleProvider({required this.child, super.key});
|
|
||||||
|
|
||||||
static SupportedLocaleProviderState of(BuildContext context) {
|
|
||||||
return context.findAncestorStateOfType<SupportedLocaleProviderState>()!;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<SupportedLocaleProvider> createState() => SupportedLocaleProviderState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class SupportedLocaleProviderState extends State<SupportedLocaleProvider> {
|
|
||||||
late final ValueNotifier<SupportedLocale> valueListenable;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
valueListenable = ValueNotifier(ServiceProviders.userPreferencesServiceOf(context).locale);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
valueListenable.dispose();
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return ValueListenableBuilder(
|
|
||||||
valueListenable: valueListenable,
|
|
||||||
builder: (_, value, child) => InheritedWidgetBase<SupportedLocale>(
|
|
||||||
data: value,
|
|
||||||
child: child!,
|
|
||||||
),
|
|
||||||
child: widget.child,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setLocale(SupportedLocale locale) {
|
|
||||||
S.load(Locale(locale.intlName)).then((value) {
|
|
||||||
valueListenable.value = locale;
|
|
||||||
ServiceProviders.userPreferencesServiceOf(context).locale = locale;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,6 +4,7 @@ import 'package:flutter/scheduler.dart';
|
||||||
import 'package:lightmeter/data/models/dynamic_colors_state.dart';
|
import 'package:lightmeter/data/models/dynamic_colors_state.dart';
|
||||||
import 'package:lightmeter/data/models/theme_type.dart';
|
import 'package:lightmeter/data/models/theme_type.dart';
|
||||||
import 'package:lightmeter/data/shared_prefs_service.dart';
|
import 'package:lightmeter/data/shared_prefs_service.dart';
|
||||||
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
import 'package:lightmeter/providers/service_providers.dart';
|
||||||
import 'package:lightmeter/res/dimens.dart';
|
import 'package:lightmeter/res/dimens.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
import 'package:lightmeter/utils/inherited_generics.dart';
|
||||||
|
@ -47,7 +48,6 @@ class ThemeProvider extends StatefulWidget {
|
||||||
class ThemeProviderState extends State<ThemeProvider> with WidgetsBindingObserver {
|
class ThemeProviderState extends State<ThemeProvider> with WidgetsBindingObserver {
|
||||||
UserPreferencesService get _prefs => ServiceProviders.userPreferencesServiceOf(context);
|
UserPreferencesService get _prefs => ServiceProviders.userPreferencesServiceOf(context);
|
||||||
|
|
||||||
late final _themeTypeNotifier = ValueNotifier<ThemeType>(_prefs.themeType);
|
|
||||||
late final _dynamicColorNotifier = ValueNotifier<bool>(_prefs.dynamicColor);
|
late final _dynamicColorNotifier = ValueNotifier<bool>(_prefs.dynamicColor);
|
||||||
late final _primaryColorNotifier = ValueNotifier<Color>(_prefs.primaryColor);
|
late final _primaryColorNotifier = ValueNotifier<Color>(_prefs.primaryColor);
|
||||||
|
|
||||||
|
@ -66,7 +66,6 @@ class ThemeProviderState extends State<ThemeProvider> with WidgetsBindingObserve
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
_themeTypeNotifier.dispose();
|
|
||||||
_dynamicColorNotifier.dispose();
|
_dynamicColorNotifier.dispose();
|
||||||
_primaryColorNotifier.dispose();
|
_primaryColorNotifier.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
@ -75,10 +74,6 @@ class ThemeProviderState extends State<ThemeProvider> with WidgetsBindingObserve
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ValueListenableBuilder(
|
return ValueListenableBuilder(
|
||||||
valueListenable: _themeTypeNotifier,
|
|
||||||
builder: (_, themeType, __) => InheritedWidgetBase<ThemeType>(
|
|
||||||
data: themeType,
|
|
||||||
child: ValueListenableBuilder(
|
|
||||||
valueListenable: _dynamicColorNotifier,
|
valueListenable: _dynamicColorNotifier,
|
||||||
builder: (_, useDynamicColor, __) => _DynamicColorProvider(
|
builder: (_, useDynamicColor, __) => _DynamicColorProvider(
|
||||||
useDynamicColor: useDynamicColor,
|
useDynamicColor: useDynamicColor,
|
||||||
|
@ -92,18 +87,11 @@ class ThemeProviderState extends State<ThemeProvider> with WidgetsBindingObserve
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setThemeType(ThemeType themeType) {
|
|
||||||
_themeTypeNotifier.value = themeType;
|
|
||||||
_prefs.themeType = themeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
Brightness get _themeBrightness {
|
Brightness get _themeBrightness {
|
||||||
switch (_themeTypeNotifier.value) {
|
switch (EnumProviders.themeTypeOf(context)) {
|
||||||
case ThemeType.light:
|
case ThemeType.light:
|
||||||
return Brightness.light;
|
return Brightness.light;
|
||||||
case ThemeType.dark:
|
case ThemeType.dark:
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/data/models/ev_source_type.dart';
|
import 'package:lightmeter/data/models/ev_source_type.dart';
|
||||||
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/res/dimens.dart';
|
import 'package:lightmeter/res/dimens.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/bottom_controls/components/measure_button/widget_button_measure.dart';
|
import 'package:lightmeter/screens/metering/components/bottom_controls/components/measure_button/widget_button_measure.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
|
|
||||||
class MeteringBottomControls extends StatelessWidget {
|
class MeteringBottomControls extends StatelessWidget {
|
||||||
final double? ev;
|
final double? ev;
|
||||||
|
@ -42,7 +42,7 @@ class MeteringBottomControls extends StatelessWidget {
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: onSwitchEvSourceType,
|
onPressed: onSwitchEvSourceType,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
context.listen<EvSourceType>() != EvSourceType.camera
|
EnumProviders.evSourceTypeOf(context) != EvSourceType.camera
|
||||||
? Icons.camera_rear
|
? Icons.camera_rear
|
||||||
: Icons.wb_incandescent,
|
: Icons.wb_incandescent,
|
||||||
),
|
),
|
||||||
|
|
|
@ -6,7 +6,7 @@ import 'package:lightmeter/data/models/ev_source_type.dart';
|
||||||
import 'package:lightmeter/data/models/exposure_pair.dart';
|
import 'package:lightmeter/data/models/exposure_pair.dart';
|
||||||
import 'package:lightmeter/data/models/film.dart';
|
import 'package:lightmeter/data/models/film.dart';
|
||||||
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
|
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
|
||||||
import 'package:lightmeter/providers/ev_source_type_provider.dart';
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/providers/service_providers.dart';
|
import 'package:lightmeter/providers/service_providers.dart';
|
||||||
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
import 'package:lightmeter/screens/metering/bloc_metering.dart';
|
||||||
import 'package:lightmeter/screens/metering/components/bottom_controls/provider_bottom_controls.dart';
|
import 'package:lightmeter/screens/metering/components/bottom_controls/provider_bottom_controls.dart';
|
||||||
|
@ -46,7 +46,7 @@ class MeteringScreen extends StatelessWidget {
|
||||||
ev: state is MeteringDataState ? state.ev : null,
|
ev: state is MeteringDataState ? state.ev : null,
|
||||||
isMetering: state.isMetering,
|
isMetering: state.isMetering,
|
||||||
onSwitchEvSourceType: ServiceProviders.environmentOf(context).hasLightSensor
|
onSwitchEvSourceType: ServiceProviders.environmentOf(context).hasLightSensor
|
||||||
? EvSourceTypeProvider.of(context).toggleType
|
? EnumProviders.of(context).toggleEvSourceType
|
||||||
: null,
|
: null,
|
||||||
onMeasure: () => context.read<MeteringBloc>().add(const MeasureEvent()),
|
onMeasure: () => context.read<MeteringBloc>().add(const MeasureEvent()),
|
||||||
onSettings: () {
|
onSettings: () {
|
||||||
|
@ -110,7 +110,8 @@ class _MeteringContainerBuidler extends StatelessWidget {
|
||||||
final exposurePairs = ev != null ? buildExposureValues(context, ev!, film) : <ExposurePair>[];
|
final exposurePairs = ev != null ? buildExposureValues(context, ev!, film) : <ExposurePair>[];
|
||||||
final fastest = exposurePairs.isNotEmpty ? exposurePairs.first : null;
|
final fastest = exposurePairs.isNotEmpty ? exposurePairs.first : null;
|
||||||
final slowest = exposurePairs.isNotEmpty ? exposurePairs.last : null;
|
final slowest = exposurePairs.isNotEmpty ? exposurePairs.last : null;
|
||||||
return context.listen<EvSourceType>() == EvSourceType.camera
|
// Doubled build here when switching evSourceType. As new source bloc fires a new state on init
|
||||||
|
return EnumProviders.evSourceTypeOf(context) == EvSourceType.camera
|
||||||
? CameraContainerProvider(
|
? CameraContainerProvider(
|
||||||
fastest: fastest,
|
fastest: fastest,
|
||||||
slowest: slowest,
|
slowest: slowest,
|
||||||
|
@ -141,7 +142,7 @@ class _MeteringContainerBuidler extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Depending on the `stopType` the exposure pairs list length is multiplied by 1,2 or 3
|
/// Depending on the `stopType` the exposure pairs list length is multiplied by 1,2 or 3
|
||||||
final StopType stopType = context.listen<StopType>();
|
final StopType stopType = EnumProviders.stopTypeOf(context);
|
||||||
final int evSteps = (ev * (stopType.index + 1)).round();
|
final int evSteps = (ev * (stopType.index + 1)).round();
|
||||||
|
|
||||||
final EquipmentProfile equipmentProfile = context.listen<EquipmentProfile>();
|
final EquipmentProfile equipmentProfile = context.listen<EquipmentProfile>();
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/data/models/supported_locale.dart';
|
import 'package:lightmeter/data/models/supported_locale.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
import 'package:lightmeter/providers/supported_locale_provider.dart';
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
|
|
||||||
class LanguageListTile extends StatelessWidget {
|
class LanguageListTile extends StatelessWidget {
|
||||||
const LanguageListTile({super.key});
|
const LanguageListTile({super.key});
|
||||||
|
@ -13,20 +12,20 @@ class LanguageListTile extends StatelessWidget {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.language),
|
leading: const Icon(Icons.language),
|
||||||
title: Text(S.of(context).language),
|
title: Text(S.of(context).language),
|
||||||
trailing: Text(context.listen<SupportedLocale>().localizedName),
|
trailing: Text(EnumProviders.localeOf(context).localizedName),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showDialog<SupportedLocale>(
|
showDialog<SupportedLocale>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) => DialogPicker<SupportedLocale>(
|
builder: (_) => DialogPicker<SupportedLocale>(
|
||||||
icon: Icons.language,
|
icon: Icons.language,
|
||||||
title: S.of(context).chooseLanguage,
|
title: S.of(context).chooseLanguage,
|
||||||
selectedValue: context.get<SupportedLocale>(),
|
selectedValue: EnumProviders.localeOf(context),
|
||||||
values: SupportedLocale.values,
|
values: SupportedLocale.values,
|
||||||
titleAdapter: (context, value) => value.localizedName,
|
titleAdapter: (context, value) => value.localizedName,
|
||||||
),
|
),
|
||||||
).then((value) {
|
).then((value) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
SupportedLocaleProvider.of(context).setLocale(value);
|
EnumProviders.of(context).setLocale(value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
import 'package:lightmeter/providers/stop_type_provider.dart';
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
class StopTypeListTile extends StatelessWidget {
|
class StopTypeListTile extends StatelessWidget {
|
||||||
|
@ -13,20 +12,20 @@ class StopTypeListTile extends StatelessWidget {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.straighten),
|
leading: const Icon(Icons.straighten),
|
||||||
title: Text(S.of(context).fractionalStops),
|
title: Text(S.of(context).fractionalStops),
|
||||||
trailing: Text(_typeToString(context, context.listen<StopType>())),
|
trailing: Text(_typeToString(context, EnumProviders.stopTypeOf(context))),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showDialog<StopType>(
|
showDialog<StopType>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) => DialogPicker<StopType>(
|
builder: (_) => DialogPicker<StopType>(
|
||||||
icon: Icons.straighten,
|
icon: Icons.straighten,
|
||||||
title: S.of(context).showFractionalStops,
|
title: S.of(context).showFractionalStops,
|
||||||
selectedValue: context.get<StopType>(),
|
selectedValue: EnumProviders.stopTypeOf(context),
|
||||||
values: StopType.values,
|
values: StopType.values,
|
||||||
titleAdapter: _typeToString,
|
titleAdapter: _typeToString,
|
||||||
),
|
),
|
||||||
).then((value) {
|
).then((value) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
StopTypeProvider.of(context).set(value);
|
EnumProviders.of(context).setStopType(value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/data/models/theme_type.dart';
|
import 'package:lightmeter/data/models/theme_type.dart';
|
||||||
import 'package:lightmeter/generated/l10n.dart';
|
import 'package:lightmeter/generated/l10n.dart';
|
||||||
import 'package:lightmeter/providers/theme_provider.dart';
|
import 'package:lightmeter/providers/enum_providers.dart';
|
||||||
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
import 'package:lightmeter/screens/settings/components/shared/dialog_picker.dart/widget_dialog_picker.dart';
|
||||||
import 'package:lightmeter/utils/inherited_generics.dart';
|
|
||||||
|
|
||||||
class ThemeTypeListTile extends StatelessWidget {
|
class ThemeTypeListTile extends StatelessWidget {
|
||||||
const ThemeTypeListTile({super.key});
|
const ThemeTypeListTile({super.key});
|
||||||
|
@ -13,20 +12,20 @@ class ThemeTypeListTile extends StatelessWidget {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.brightness_6),
|
leading: const Icon(Icons.brightness_6),
|
||||||
title: Text(S.of(context).theme),
|
title: Text(S.of(context).theme),
|
||||||
trailing: Text(_typeToString(context, context.listen<ThemeType>())),
|
trailing: Text(_typeToString(context, EnumProviders.themeTypeOf(context))),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showDialog<ThemeType>(
|
showDialog<ThemeType>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) => DialogPicker<ThemeType>(
|
builder: (_) => DialogPicker<ThemeType>(
|
||||||
icon: Icons.brightness_6,
|
icon: Icons.brightness_6,
|
||||||
title: S.of(context).chooseTheme,
|
title: S.of(context).chooseTheme,
|
||||||
selectedValue: context.get<ThemeType>(),
|
selectedValue: EnumProviders.themeTypeOf(context),
|
||||||
values: ThemeType.values,
|
values: ThemeType.values,
|
||||||
titleAdapter: _typeToString,
|
titleAdapter: _typeToString,
|
||||||
),
|
),
|
||||||
).then((value) {
|
).then((value) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
ThemeProvider.of(context).setThemeType(value);
|
EnumProviders.of(context).setThemeType(value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue