import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'database_provider.dart'; // ── Key constants ───────────────────────────────────────────────────────────── abstract class SettingsKeys { static const reminderEnabled = 'reminder_enabled'; static const reminderTime = 'reminder_time'; // stored as 'HH:mm' static const biometricEnabled = 'biometric_enabled'; static const themMode = 'theme_mode'; // 'system' | 'light' | 'dark' static const modelDownloaded = 'model_downloaded'; static const onboardingComplete = 'onboarding_complete'; } // ── Generic setting reader ──────────────────────────────────────────────────── final settingProvider = FutureProvider.autoDispose.family((ref, key) { return ref.watch(settingsDaoProvider).get(key); }); // ── Settings notifier ───────────────────────────────────────────────────────── class SettingsNotifier extends Notifier> { @override AsyncValue build() => const AsyncData(null); Future set(String key, String value) async { await ref.read(settingsDaoProvider).set(key, value); if (!ref.mounted) return; ref.invalidate(settingProvider(key)); } Future setReminderEnabled(bool enabled) => set(SettingsKeys.reminderEnabled, enabled.toString()); Future setReminderTime(int hour, int minute) => set( SettingsKeys.reminderTime, '${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'); Future setBiometricEnabled(bool enabled) => set(SettingsKeys.biometricEnabled, enabled.toString()); Future setThemeMode(String mode) => set(SettingsKeys.themMode, mode); Future markModelDownloaded() => set(SettingsKeys.modelDownloaded, 'true'); Future markOnboardingComplete() => set(SettingsKeys.onboardingComplete, 'true'); } final settingsNotifierProvider = NotifierProvider.autoDispose>( SettingsNotifier.new); // ── Convenience bool readers ────────────────────────────────────────────────── final isOnboardingCompleteProvider = FutureProvider.autoDispose((ref) async { final val = await ref.watch(settingProvider(SettingsKeys.onboardingComplete).future); return val == 'true'; }); final isModelDownloadedProvider = FutureProvider.autoDispose((ref) async { final val = await ref.watch(settingProvider(SettingsKeys.modelDownloaded).future); return val == 'true'; });