ServiceProviders -> ServiceProvider

This commit is contained in:
Vadim 2023-08-13 20:58:11 +02:00
parent 9822d2541b
commit a8aabcc5b8
12 changed files with 57 additions and 57 deletions

View file

@ -9,7 +9,7 @@ import 'package:lightmeter/environment.dart';
import 'package:lightmeter/providers/user_preferences_provider.dart'; import 'package:lightmeter/providers/user_preferences_provider.dart';
import 'package:lightmeter/providers/equipment_profile_provider.dart'; import 'package:lightmeter/providers/equipment_profile_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_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';
@ -28,7 +28,7 @@ class LightmeterProviders extends StatelessWidget {
]), ]),
builder: (_, snapshot) { builder: (_, snapshot) {
if (snapshot.data != null) { if (snapshot.data != null) {
return ServiceProviders( return ServiceProvider(
caffeineService: const CaffeineService(), caffeineService: const CaffeineService(),
environment: env.copyWith(hasLightSensor: snapshot.data![1] as bool), environment: env.copyWith(hasLightSensor: snapshot.data![1] as bool),
hapticsService: const HapticsService(), hapticsService: const HapticsService(),

View file

@ -1,5 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:lightmeter/utils/inherited_generics.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';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -35,7 +35,7 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
EquipmentProfile get _selectedProfile => _customProfiles.firstWhere( EquipmentProfile get _selectedProfile => _customProfiles.firstWhere(
(e) => e.id == _selectedId, (e) => e.id == _selectedId,
orElse: () { orElse: () {
ServiceProviders.userPreferencesServiceOf(context).selectedEquipmentProfileId = ServiceProvider.userPreferencesServiceOf(context).selectedEquipmentProfileId =
_defaultProfile.id; _defaultProfile.id;
return _defaultProfile; return _defaultProfile;
}, },
@ -44,8 +44,8 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_selectedId = ServiceProviders.userPreferencesServiceOf(context).selectedEquipmentProfileId; _selectedId = ServiceProvider.userPreferencesServiceOf(context).selectedEquipmentProfileId;
_customProfiles = ServiceProviders.userPreferencesServiceOf(context).equipmentProfiles; _customProfiles = ServiceProvider.userPreferencesServiceOf(context).equipmentProfiles;
} }
@override @override
@ -63,7 +63,7 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
setState(() { setState(() {
_selectedId = data.id; _selectedId = data.id;
}); });
ServiceProviders.userPreferencesServiceOf(context).selectedEquipmentProfileId = ServiceProvider.userPreferencesServiceOf(context).selectedEquipmentProfileId =
_selectedProfile.id; _selectedProfile.id;
} }
@ -96,7 +96,7 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
} }
void _refreshSavedProfiles() { void _refreshSavedProfiles() {
ServiceProviders.userPreferencesServiceOf(context).equipmentProfiles = _customProfiles; ServiceProvider.userPreferencesServiceOf(context).equipmentProfiles = _customProfiles;
setState(() {}); setState(() {});
} }
} }

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:lightmeter/utils/inherited_generics.dart'; import 'package:lightmeter/utils/inherited_generics.dart';
class MeteringScreenLayoutProvider extends StatefulWidget { class MeteringScreenLayoutProvider extends StatefulWidget {
@ -18,7 +18,7 @@ class MeteringScreenLayoutProvider extends StatefulWidget {
class MeteringScreenLayoutProviderState extends State<MeteringScreenLayoutProvider> { class MeteringScreenLayoutProviderState extends State<MeteringScreenLayoutProvider> {
late final MeteringScreenLayoutConfig _config = late final MeteringScreenLayoutConfig _config =
ServiceProviders.userPreferencesServiceOf(context).meteringScreenLayout; ServiceProvider.userPreferencesServiceOf(context).meteringScreenLayout;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -38,7 +38,7 @@ class MeteringScreenLayoutProviderState extends State<MeteringScreenLayoutProvid
); );
}); });
}); });
ServiceProviders.userPreferencesServiceOf(context).meteringScreenLayout = _config; ServiceProvider.userPreferencesServiceOf(context).meteringScreenLayout = _config;
} }
} }

View file

@ -7,7 +7,7 @@ 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';
class ServiceProviders extends InheritedWidget { class ServiceProvider extends InheritedWidget {
final CaffeineService caffeineService; final CaffeineService caffeineService;
final Environment environment; final Environment environment;
final HapticsService hapticsService; final HapticsService hapticsService;
@ -16,7 +16,7 @@ class ServiceProviders extends InheritedWidget {
final UserPreferencesService userPreferencesService; final UserPreferencesService userPreferencesService;
final VolumeEventsService volumeEventsService; final VolumeEventsService volumeEventsService;
const ServiceProviders({ const ServiceProvider({
required this.caffeineService, required this.caffeineService,
required this.environment, required this.environment,
required this.hapticsService, required this.hapticsService,
@ -28,37 +28,37 @@ class ServiceProviders extends InheritedWidget {
}); });
static CaffeineService caffeineServiceOf(BuildContext context) { static CaffeineService caffeineServiceOf(BuildContext context) {
return ServiceProviders._of(context).caffeineService; return ServiceProvider._of(context).caffeineService;
} }
static Environment environmentOf(BuildContext context) { static Environment environmentOf(BuildContext context) {
return ServiceProviders._of(context).environment; return ServiceProvider._of(context).environment;
} }
static HapticsService hapticsServiceOf(BuildContext context) { static HapticsService hapticsServiceOf(BuildContext context) {
return ServiceProviders._of(context).hapticsService; return ServiceProvider._of(context).hapticsService;
} }
static LightSensorService lightSensorServiceOf(BuildContext context) { static LightSensorService lightSensorServiceOf(BuildContext context) {
return ServiceProviders._of(context).lightSensorService; return ServiceProvider._of(context).lightSensorService;
} }
static PermissionsService permissionsServiceOf(BuildContext context) { static PermissionsService permissionsServiceOf(BuildContext context) {
return ServiceProviders._of(context).permissionsService; return ServiceProvider._of(context).permissionsService;
} }
static UserPreferencesService userPreferencesServiceOf(BuildContext context) { static UserPreferencesService userPreferencesServiceOf(BuildContext context) {
return ServiceProviders._of(context).userPreferencesService; return ServiceProvider._of(context).userPreferencesService;
} }
static VolumeEventsService volumeEventsServiceOf(BuildContext context) { static VolumeEventsService volumeEventsServiceOf(BuildContext context) {
return ServiceProviders._of(context).volumeEventsService; return ServiceProvider._of(context).volumeEventsService;
} }
static ServiceProviders _of(BuildContext context) { static ServiceProvider _of(BuildContext context) {
return context.findAncestorWidgetOfExactType<ServiceProviders>()!; return context.findAncestorWidgetOfExactType<ServiceProvider>()!;
} }
@override @override
bool updateShouldNotify(ServiceProviders oldWidget) => false; bool updateShouldNotify(ServiceProvider oldWidget) => false;
} }

View file

@ -7,7 +7,7 @@ import 'package:lightmeter/data/models/supported_locale.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/generated/l10n.dart'; import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
enum _ListenableAspect { enum _ListenableAspect {
@ -69,7 +69,7 @@ class UserPreferencesProvider extends StatefulWidget {
class _UserPreferencesProviderState extends State<UserPreferencesProvider> class _UserPreferencesProviderState extends State<UserPreferencesProvider>
with WidgetsBindingObserver { with WidgetsBindingObserver {
UserPreferencesService get userPreferencesService => UserPreferencesService get userPreferencesService =>
ServiceProviders.userPreferencesServiceOf(context); ServiceProvider.userPreferencesServiceOf(context);
late bool dynamicColor = userPreferencesService.dynamicColor; late bool dynamicColor = userPreferencesService.dynamicColor;
late EvSourceType evSourceType; late EvSourceType evSourceType;
@ -81,9 +81,9 @@ class _UserPreferencesProviderState extends State<UserPreferencesProvider>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
evSourceType = ServiceProviders.userPreferencesServiceOf(context).evSourceType; evSourceType = ServiceProvider.userPreferencesServiceOf(context).evSourceType;
evSourceType = evSourceType == EvSourceType.sensor && evSourceType = evSourceType == EvSourceType.sensor &&
!ServiceProviders.environmentOf(context).hasLightSensor !ServiceProvider.environmentOf(context).hasLightSensor
? EvSourceType.camera ? EvSourceType.camera
: evSourceType; : evSourceType;
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
@ -138,11 +138,11 @@ class _UserPreferencesProviderState extends State<UserPreferencesProvider>
setState(() { setState(() {
dynamicColor = enable; dynamicColor = enable;
}); });
ServiceProviders.userPreferencesServiceOf(context).dynamicColor = enable; ServiceProvider.userPreferencesServiceOf(context).dynamicColor = enable;
} }
void toggleEvSourceType() { void toggleEvSourceType() {
if (!ServiceProviders.environmentOf(context).hasLightSensor) { if (!ServiceProvider.environmentOf(context).hasLightSensor) {
return; return;
} }
setState(() { setState(() {
@ -153,7 +153,7 @@ class _UserPreferencesProviderState extends State<UserPreferencesProvider>
evSourceType = EvSourceType.camera; evSourceType = EvSourceType.camera;
} }
}); });
ServiceProviders.userPreferencesServiceOf(context).evSourceType = evSourceType; ServiceProvider.userPreferencesServiceOf(context).evSourceType = evSourceType;
} }
void setLocale(SupportedLocale locale) { void setLocale(SupportedLocale locale) {
@ -161,7 +161,7 @@ class _UserPreferencesProviderState extends State<UserPreferencesProvider>
setState(() { setState(() {
this.locale = locale; this.locale = locale;
}); });
ServiceProviders.userPreferencesServiceOf(context).locale = locale; ServiceProvider.userPreferencesServiceOf(context).locale = locale;
}); });
} }
@ -169,21 +169,21 @@ class _UserPreferencesProviderState extends State<UserPreferencesProvider>
setState(() { setState(() {
this.primaryColor = primaryColor; this.primaryColor = primaryColor;
}); });
ServiceProviders.userPreferencesServiceOf(context).primaryColor = primaryColor; ServiceProvider.userPreferencesServiceOf(context).primaryColor = primaryColor;
} }
void setStopType(StopType stopType) { void setStopType(StopType stopType) {
setState(() { setState(() {
this.stopType = stopType; this.stopType = stopType;
}); });
ServiceProviders.userPreferencesServiceOf(context).stopType = stopType; ServiceProvider.userPreferencesServiceOf(context).stopType = stopType;
} }
void setThemeType(ThemeType themeType) { void setThemeType(ThemeType themeType) {
setState(() { setState(() {
this.themeType = themeType; this.themeType = themeType;
}); });
ServiceProviders.userPreferencesServiceOf(context).themeType = themeType; ServiceProvider.userPreferencesServiceOf(context).themeType = themeType;
} }
Brightness get _themeBrightness { Brightness get _themeBrightness {

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:lightmeter/interactors/metering_interactor.dart'; import 'package:lightmeter/interactors/metering_interactor.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:lightmeter/screens/metering/bloc_metering.dart'; import 'package:lightmeter/screens/metering/bloc_metering.dart';
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart'; import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
import 'package:lightmeter/screens/metering/components/shared/volume_keys_notifier/notifier_volume_keys.dart'; import 'package:lightmeter/screens/metering/components/shared/volume_keys_notifier/notifier_volume_keys.dart';
@ -20,15 +20,15 @@ class _MeteringFlowState extends State<MeteringFlow> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InheritedWidgetBase<MeteringInteractor>( return InheritedWidgetBase<MeteringInteractor>(
data: MeteringInteractor( data: MeteringInteractor(
ServiceProviders.userPreferencesServiceOf(context), ServiceProvider.userPreferencesServiceOf(context),
ServiceProviders.caffeineServiceOf(context), ServiceProvider.caffeineServiceOf(context),
ServiceProviders.hapticsServiceOf(context), ServiceProvider.hapticsServiceOf(context),
ServiceProviders.permissionsServiceOf(context), ServiceProvider.permissionsServiceOf(context),
ServiceProviders.lightSensorServiceOf(context), ServiceProvider.lightSensorServiceOf(context),
ServiceProviders.volumeEventsServiceOf(context), ServiceProvider.volumeEventsServiceOf(context),
)..initialize(), )..initialize(),
child: InheritedWidgetBase<VolumeKeysNotifier>( child: InheritedWidgetBase<VolumeKeysNotifier>(
data: VolumeKeysNotifier(ServiceProviders.volumeEventsServiceOf(context)), data: VolumeKeysNotifier(ServiceProvider.volumeEventsServiceOf(context)),
child: MultiBlocProvider( child: MultiBlocProvider(
providers: [ providers: [
BlocProvider(create: (_) => MeteringCommunicationBloc()), BlocProvider(create: (_) => MeteringCommunicationBloc()),

View file

@ -7,7 +7,7 @@ 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/user_preferences_provider.dart'; import 'package:lightmeter/providers/user_preferences_provider.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.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';
import 'package:lightmeter/screens/metering/components/camera_container/provider_container_camera.dart'; import 'package:lightmeter/screens/metering/components/camera_container/provider_container_camera.dart';
@ -45,7 +45,7 @@ class MeteringScreen extends StatelessWidget {
builder: (context, state) => MeteringBottomControlsProvider( builder: (context, state) => MeteringBottomControlsProvider(
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: ServiceProvider.environmentOf(context).hasLightSensor
? UserPreferencesProvider.of(context).toggleEvSourceType ? UserPreferencesProvider.of(context).toggleEvSourceType
: null, : null,
onMeasure: () => context.read<MeteringBloc>().add(const MeasureEvent()), onMeasure: () => context.read<MeteringBloc>().add(const MeasureEvent()),

View file

@ -1,6 +1,6 @@
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/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class ReportIssueListTile extends StatelessWidget { class ReportIssueListTile extends StatelessWidget {
@ -13,7 +13,7 @@ class ReportIssueListTile extends StatelessWidget {
title: Text(S.of(context).reportIssue), title: Text(S.of(context).reportIssue),
onTap: () { onTap: () {
launchUrl( launchUrl(
Uri.parse(ServiceProviders.environmentOf(context).issuesReportUrl), Uri.parse(ServiceProvider.environmentOf(context).issuesReportUrl),
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
); );
}, },

View file

@ -1,6 +1,6 @@
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/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class SourceCodeListTile extends StatelessWidget { class SourceCodeListTile extends StatelessWidget {
@ -13,7 +13,7 @@ class SourceCodeListTile extends StatelessWidget {
title: Text(S.of(context).sourceCode), title: Text(S.of(context).sourceCode),
onTap: () { onTap: () {
launchUrl( launchUrl(
Uri.parse(ServiceProviders.environmentOf(context).sourceCodeUrl), Uri.parse(ServiceProvider.environmentOf(context).sourceCodeUrl),
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
); );
}, },

View file

@ -1,7 +1,7 @@
import 'package:clipboard/clipboard.dart'; import 'package:clipboard/clipboard.dart';
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/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class WriteEmailListTile extends StatelessWidget { class WriteEmailListTile extends StatelessWidget {
@ -13,7 +13,7 @@ class WriteEmailListTile extends StatelessWidget {
leading: const Icon(Icons.email), leading: const Icon(Icons.email),
title: Text(S.of(context).writeEmail), title: Text(S.of(context).writeEmail),
onTap: () { onTap: () {
final email = ServiceProviders.environmentOf(context).contactEmail; final email = ServiceProvider.environmentOf(context).contactEmail;
final mailToUrl = Uri.parse('mailto:$email?subject=M3 Lightmeter'); final mailToUrl = Uri.parse('mailto:$email?subject=M3 Lightmeter');
canLaunchUrl(mailToUrl).then((canLaunch) { canLaunchUrl(mailToUrl).then((canLaunch) {
if (canLaunch) { if (canLaunch) {

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/res/dimens.dart';
import 'package:lightmeter/screens/settings/components/metering/components/calibration/components/calibration_dialog/bloc_dialog_calibration.dart'; import 'package:lightmeter/screens/settings/components/metering/components/calibration/components/calibration_dialog/bloc_dialog_calibration.dart';
import 'package:lightmeter/screens/settings/components/metering/components/calibration/components/calibration_dialog/event_dialog_calibration.dart'; import 'package:lightmeter/screens/settings/components/metering/components/calibration/components/calibration_dialog/event_dialog_calibration.dart';
@ -14,7 +14,7 @@ class CalibrationDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final bool hasLightSensor = ServiceProviders.environmentOf(context).hasLightSensor; final bool hasLightSensor = ServiceProvider.environmentOf(context).hasLightSensor;
return AlertDialog( return AlertDialog(
icon: const Icon(Icons.settings_brightness), icon: const Icon(Icons.settings_brightness),
titlePadding: Dimens.dialogIconTitlePadding, titlePadding: Dimens.dialogIconTitlePadding,

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lightmeter/interactors/settings_interactor.dart'; import 'package:lightmeter/interactors/settings_interactor.dart';
import 'package:lightmeter/providers/service_providers.dart'; import 'package:lightmeter/providers/service_provider.dart';
import 'package:lightmeter/screens/settings/screen_settings.dart'; import 'package:lightmeter/screens/settings/screen_settings.dart';
import 'package:lightmeter/utils/inherited_generics.dart'; import 'package:lightmeter/utils/inherited_generics.dart';
@ -11,10 +11,10 @@ class SettingsFlow extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InheritedWidgetBase<SettingsInteractor>( return InheritedWidgetBase<SettingsInteractor>(
data: SettingsInteractor( data: SettingsInteractor(
ServiceProviders.userPreferencesServiceOf(context), ServiceProvider.userPreferencesServiceOf(context),
ServiceProviders.caffeineServiceOf(context), ServiceProvider.caffeineServiceOf(context),
ServiceProviders.hapticsServiceOf(context), ServiceProvider.hapticsServiceOf(context),
ServiceProviders.volumeEventsServiceOf(context), ServiceProvider.volumeEventsServiceOf(context),
), ),
child: const SettingsScreen(), child: const SettingsScreen(),
); );