Files
ignis_app/lib/features/settings/providers/settings_providers.dart
2026-05-15 11:26:23 +07:00

61 lines
1.9 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../homes/providers/homes_providers.dart';
import '../../homes/providers/location_providers.dart';
import '../../shared/providers/core_providers.dart';
import '../models/app_theme_preset.dart';
import '../models/geofence_system_state.dart';
import '../models/notification_permission_status.dart';
import '../services/geofence_system_status_service.dart';
import '../services/notification_permission_status_service.dart';
final initialAppThemePresetProvider = Provider<AppThemePreset>(
(ref) => AppThemePreset.fallback,
);
final appThemeProvider = NotifierProvider<AppThemeNotifier, AppThemePreset>(
AppThemeNotifier.new,
);
class AppThemeNotifier extends Notifier<AppThemePreset> {
@override
AppThemePreset build() => ref.read(initialAppThemePresetProvider);
Future<void> setTheme(AppThemePreset preset) async {
if (state == preset) {
return;
}
state = preset;
await ref.read(settingsServiceProvider).setAppThemePreset(preset);
}
}
final geofenceSystemStatusServiceProvider =
Provider<GeofenceSystemStatusService>(
(ref) => DeviceGeofenceSystemStatusService(
locationPlatformService: ref.read(locationPlatformServiceProvider),
),
);
final geofenceSystemStatusProvider = FutureProvider<GeofenceSystemState>((
ref,
) async {
final currentHome = ref.watch(currentHomeProvider);
return ref
.watch(geofenceSystemStatusServiceProvider)
.inspect(
hasActiveHome: currentHome != null,
hasCoordinates: currentHome?.hasCoordinates == true,
);
});
final notificationPermissionStatusServiceProvider =
Provider<NotificationPermissionStatusService>(
(ref) => DeviceNotificationPermissionStatusService(),
);
final notificationPermissionStatusProvider =
FutureProvider<NotificationPermissionStatus>((ref) async {
return ref.watch(notificationPermissionStatusServiceProvider).inspect();
});