import 'package:flutter/material.dart' show TimeOfDay; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; part 'notification_settings_notifier.g.dart'; class NotificationSettings { final bool enabled; final TimeOfDay time; const NotificationSettings({required this.enabled, required this.time}); } @Riverpod(keepAlive: true) class NotificationSettingsNotifier extends _$NotificationSettingsNotifier { static const _enabledKey = 'notifications_enabled'; static const _hourKey = 'notifications_hour'; static const _minuteKey = 'notifications_minute'; @override NotificationSettings build() { _load(); return const NotificationSettings( enabled: false, time: TimeOfDay(hour: 7, minute: 0), ); } Future _load() async { final prefs = await SharedPreferences.getInstance(); final enabled = prefs.getBool(_enabledKey) ?? false; final hour = prefs.getInt(_hourKey) ?? 7; final minute = prefs.getInt(_minuteKey) ?? 0; state = NotificationSettings( enabled: enabled, time: TimeOfDay(hour: hour, minute: minute), ); } Future setEnabled(bool enabled) async { state = NotificationSettings(enabled: enabled, time: state.time); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_enabledKey, enabled); } Future setTime(TimeOfDay time) async { state = NotificationSettings(enabled: state.enabled, time: time); final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_hourKey, time.hour); await prefs.setInt(_minuteKey, time.minute); } }