From c8c96b851e048644f8203e08b47c943ea935fcfc Mon Sep 17 00:00:00 2001 From: Vadim Date: Sun, 13 Aug 2023 16:10:25 +0200 Subject: [PATCH] Added `EnumProviders` widget for enum values --- lib/application.dart | 3 +- lib/providers.dart | 18 +- lib/providers/enum_providers.dart | 164 ++++++++++++++++++ lib/providers/ev_source_type_provider.dart | 62 ------- lib/providers/stop_type_provider.dart | 42 ----- lib/providers/supported_locale_provider.dart | 53 ------ lib/providers/theme_provider.dart | 36 ++-- .../widget_bottom_controls.dart | 4 +- lib/screens/metering/screen_metering.dart | 9 +- .../language/widget_list_tile_language.dart | 9 +- .../widget_list_tile_fractional_stops.dart | 9 +- .../widget_list_tile_theme_type.dart | 9 +- 12 files changed, 203 insertions(+), 215 deletions(-) create mode 100644 lib/providers/enum_providers.dart delete mode 100644 lib/providers/ev_source_type_provider.dart delete mode 100644 lib/providers/stop_type_provider.dart delete mode 100644 lib/providers/supported_locale_provider.dart diff --git a/lib/application.dart b/lib/application.dart index 3880a08..6bae96d 100644 --- a/lib/application.dart +++ b/lib/application.dart @@ -5,6 +5,7 @@ import 'package:lightmeter/data/models/supported_locale.dart'; import 'package:lightmeter/environment.dart'; import 'package:lightmeter/generated/l10n.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/settings/flow_settings.dart'; import 'package:lightmeter/utils/inherited_generics.dart'; @@ -22,7 +23,7 @@ class Application extends StatelessWidget { ? _AnnotatedRegionWrapper( child: MaterialApp( theme: context.listen(), - locale: Locale(context.listen().intlName), + locale: Locale(EnumProviders.localeOf(context).intlName), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, diff --git a/lib/providers.dart b/lib/providers.dart index 72b7131..cb26523 100644 --- a/lib/providers.dart +++ b/lib/providers.dart @@ -6,12 +6,10 @@ import 'package:lightmeter/data/permissions_service.dart'; import 'package:lightmeter/data/shared_prefs_service.dart'; import 'package:lightmeter/data/volume_events_service.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/ev_source_type_provider.dart'; import 'package:lightmeter/providers/metering_screen_layout_provider.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:platform/platform.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -39,16 +37,12 @@ class LightmeterProviders extends StatelessWidget { permissionsService: const PermissionsService(), userPreferencesService: UserPreferencesService(snapshot.data![0] as SharedPreferences), volumeEventsService: const VolumeEventsService(LocalPlatform()), - child: MeteringScreenLayoutProvider( - child: StopTypeProvider( + child: EnumProviders( + child: MeteringScreenLayoutProvider( child: EquipmentProfileProvider( - child: EvSourceTypeProvider( - child: SupportedLocaleProvider( - child: ThemeProvider( - child: Builder( - builder: (context) => builder(context, true), - ), - ), + child: ThemeProvider( + child: Builder( + builder: (context) => builder(context, true), ), ), ), diff --git a/lib/providers/enum_providers.dart b/lib/providers/enum_providers.dart new file mode 100644 index 0000000..c37ff86 --- /dev/null +++ b/lib/providers/enum_providers.dart @@ -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 createState() => _EnumProvidersState(); +} + +class _EnumProvidersState extends State { + 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)); + } +} diff --git a/lib/providers/ev_source_type_provider.dart b/lib/providers/ev_source_type_provider.dart deleted file mode 100644 index 8042341..0000000 --- a/lib/providers/ev_source_type_provider.dart +++ /dev/null @@ -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()!; - } - - @override - State createState() => EvSourceTypeProviderState(); -} - -class EvSourceTypeProviderState extends State { - late final ValueNotifier 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( - 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; - } -} diff --git a/lib/providers/stop_type_provider.dart b/lib/providers/stop_type_provider.dart deleted file mode 100644 index 80a7e6f..0000000 --- a/lib/providers/stop_type_provider.dart +++ /dev/null @@ -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()!; - } - - @override - State createState() => StopTypeProviderState(); -} - -class StopTypeProviderState extends State { - late StopType _stopType; - - @override - void initState() { - super.initState(); - _stopType = ServiceProviders.userPreferencesServiceOf(context).stopType; - } - - @override - Widget build(BuildContext context) { - return InheritedWidgetBase( - data: _stopType, - child: widget.child, - ); - } - - void set(StopType type) { - setState(() { - _stopType = type; - }); - ServiceProviders.userPreferencesServiceOf(context).stopType = type; - } -} diff --git a/lib/providers/supported_locale_provider.dart b/lib/providers/supported_locale_provider.dart deleted file mode 100644 index 3ca336f..0000000 --- a/lib/providers/supported_locale_provider.dart +++ /dev/null @@ -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()!; - } - - @override - State createState() => SupportedLocaleProviderState(); -} - -class SupportedLocaleProviderState extends State { - late final ValueNotifier 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( - 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; - }); - } -} diff --git a/lib/providers/theme_provider.dart b/lib/providers/theme_provider.dart index 551499c..df6811b 100644 --- a/lib/providers/theme_provider.dart +++ b/lib/providers/theme_provider.dart @@ -4,6 +4,7 @@ import 'package:flutter/scheduler.dart'; import 'package:lightmeter/data/models/dynamic_colors_state.dart'; import 'package:lightmeter/data/models/theme_type.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/res/dimens.dart'; import 'package:lightmeter/utils/inherited_generics.dart'; @@ -47,7 +48,6 @@ class ThemeProvider extends StatefulWidget { class ThemeProviderState extends State with WidgetsBindingObserver { UserPreferencesService get _prefs => ServiceProviders.userPreferencesServiceOf(context); - late final _themeTypeNotifier = ValueNotifier(_prefs.themeType); late final _dynamicColorNotifier = ValueNotifier(_prefs.dynamicColor); late final _primaryColorNotifier = ValueNotifier(_prefs.primaryColor); @@ -66,7 +66,6 @@ class ThemeProviderState extends State with WidgetsBindingObserve @override void dispose() { WidgetsBinding.instance.removeObserver(this); - _themeTypeNotifier.dispose(); _dynamicColorNotifier.dispose(); _primaryColorNotifier.dispose(); super.dispose(); @@ -75,35 +74,24 @@ class ThemeProviderState extends State with WidgetsBindingObserve @override Widget build(BuildContext context) { return ValueListenableBuilder( - valueListenable: _themeTypeNotifier, - builder: (_, themeType, __) => InheritedWidgetBase( - data: themeType, - child: ValueListenableBuilder( - valueListenable: _dynamicColorNotifier, - builder: (_, useDynamicColor, __) => _DynamicColorProvider( - useDynamicColor: useDynamicColor, - themeBrightness: _themeBrightness, - builder: (_, dynamicPrimaryColor) => ValueListenableBuilder( - valueListenable: _primaryColorNotifier, - builder: (_, primaryColor, __) => _ThemeDataProvider( - primaryColor: dynamicPrimaryColor ?? primaryColor, - brightness: _themeBrightness, - child: widget.child, - ), - ), + valueListenable: _dynamicColorNotifier, + builder: (_, useDynamicColor, __) => _DynamicColorProvider( + useDynamicColor: useDynamicColor, + themeBrightness: _themeBrightness, + builder: (_, dynamicPrimaryColor) => ValueListenableBuilder( + valueListenable: _primaryColorNotifier, + builder: (_, primaryColor, __) => _ThemeDataProvider( + primaryColor: dynamicPrimaryColor ?? primaryColor, + brightness: _themeBrightness, + child: widget.child, ), ), ), ); } - void setThemeType(ThemeType themeType) { - _themeTypeNotifier.value = themeType; - _prefs.themeType = themeType; - } - Brightness get _themeBrightness { - switch (_themeTypeNotifier.value) { + switch (EnumProviders.themeTypeOf(context)) { case ThemeType.light: return Brightness.light; case ThemeType.dark: diff --git a/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart b/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart index 9989494..5332cea 100644 --- a/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart +++ b/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.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/screens/metering/components/bottom_controls/components/measure_button/widget_button_measure.dart'; -import 'package:lightmeter/utils/inherited_generics.dart'; class MeteringBottomControls extends StatelessWidget { final double? ev; @@ -42,7 +42,7 @@ class MeteringBottomControls extends StatelessWidget { child: IconButton( onPressed: onSwitchEvSourceType, icon: Icon( - context.listen() != EvSourceType.camera + EnumProviders.evSourceTypeOf(context) != EvSourceType.camera ? Icons.camera_rear : Icons.wb_incandescent, ), diff --git a/lib/screens/metering/screen_metering.dart b/lib/screens/metering/screen_metering.dart index 19099e7..7702fbc 100644 --- a/lib/screens/metering/screen_metering.dart +++ b/lib/screens/metering/screen_metering.dart @@ -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/film.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/screens/metering/bloc_metering.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, isMetering: state.isMetering, onSwitchEvSourceType: ServiceProviders.environmentOf(context).hasLightSensor - ? EvSourceTypeProvider.of(context).toggleType + ? EnumProviders.of(context).toggleEvSourceType : null, onMeasure: () => context.read().add(const MeasureEvent()), onSettings: () { @@ -110,7 +110,8 @@ class _MeteringContainerBuidler extends StatelessWidget { final exposurePairs = ev != null ? buildExposureValues(context, ev!, film) : []; final fastest = exposurePairs.isNotEmpty ? exposurePairs.first : null; final slowest = exposurePairs.isNotEmpty ? exposurePairs.last : null; - return context.listen() == 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( fastest: fastest, 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 - final StopType stopType = context.listen(); + final StopType stopType = EnumProviders.stopTypeOf(context); final int evSteps = (ev * (stopType.index + 1)).round(); final EquipmentProfile equipmentProfile = context.listen(); diff --git a/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart b/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart index 381f286..3ae6d20 100644 --- a/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart +++ b/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/data/models/supported_locale.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/utils/inherited_generics.dart'; class LanguageListTile extends StatelessWidget { const LanguageListTile({super.key}); @@ -13,20 +12,20 @@ class LanguageListTile extends StatelessWidget { return ListTile( leading: const Icon(Icons.language), title: Text(S.of(context).language), - trailing: Text(context.listen().localizedName), + trailing: Text(EnumProviders.localeOf(context).localizedName), onTap: () { showDialog( context: context, builder: (_) => DialogPicker( icon: Icons.language, title: S.of(context).chooseLanguage, - selectedValue: context.get(), + selectedValue: EnumProviders.localeOf(context), values: SupportedLocale.values, titleAdapter: (context, value) => value.localizedName, ), ).then((value) { if (value != null) { - SupportedLocaleProvider.of(context).setLocale(value); + EnumProviders.of(context).setLocale(value); } }); }, diff --git a/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart b/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart index 2a27a56..8c798c3 100644 --- a/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart +++ b/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.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/utils/inherited_generics.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class StopTypeListTile extends StatelessWidget { @@ -13,20 +12,20 @@ class StopTypeListTile extends StatelessWidget { return ListTile( leading: const Icon(Icons.straighten), title: Text(S.of(context).fractionalStops), - trailing: Text(_typeToString(context, context.listen())), + trailing: Text(_typeToString(context, EnumProviders.stopTypeOf(context))), onTap: () { showDialog( context: context, builder: (_) => DialogPicker( icon: Icons.straighten, title: S.of(context).showFractionalStops, - selectedValue: context.get(), + selectedValue: EnumProviders.stopTypeOf(context), values: StopType.values, titleAdapter: _typeToString, ), ).then((value) { if (value != null) { - StopTypeProvider.of(context).set(value); + EnumProviders.of(context).setStopType(value); } }); }, diff --git a/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart b/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart index 46e1b86..0960ade 100644 --- a/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart +++ b/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/data/models/theme_type.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/utils/inherited_generics.dart'; class ThemeTypeListTile extends StatelessWidget { const ThemeTypeListTile({super.key}); @@ -13,20 +12,20 @@ class ThemeTypeListTile extends StatelessWidget { return ListTile( leading: const Icon(Icons.brightness_6), title: Text(S.of(context).theme), - trailing: Text(_typeToString(context, context.listen())), + trailing: Text(_typeToString(context, EnumProviders.themeTypeOf(context))), onTap: () { showDialog( context: context, builder: (_) => DialogPicker( icon: Icons.brightness_6, title: S.of(context).chooseTheme, - selectedValue: context.get(), + selectedValue: EnumProviders.themeTypeOf(context), values: ThemeType.values, titleAdapter: _typeToString, ), ).then((value) { if (value != null) { - ThemeProvider.of(context).setThemeType(value); + EnumProviders.of(context).setThemeType(value); } }); },