Spaces:
Running
Running
| import 'package:flutter/material.dart'; | |
| import 'package:flutter_riverpod/flutter_riverpod.dart'; | |
| import 'package:shared_preferences/shared_preferences.dart'; | |
| final settingsProvider = StateNotifierProvider<SettingsNotifier, Settings>((ref) { | |
| return SettingsNotifier(); | |
| }); | |
| class Settings { | |
| final bool useKg; | |
| final ThemeMode themeMode; | |
| final bool showDemoData; | |
| const Settings({ | |
| this.useKg = true, | |
| this.themeMode = ThemeMode.system, | |
| this.showDemoData = false, | |
| }); | |
| Settings copyWith({ | |
| bool? useKg, | |
| ThemeMode? themeMode, | |
| bool? showDemoData, | |
| }) { | |
| return Settings( | |
| useKg: useKg ?? this.useKg, | |
| themeMode: themeMode ?? this.themeMode, | |
| showDemoData: showDemoData ?? this.showDemoData, | |
| ); | |
| } | |
| } | |
| class SettingsNotifier extends StateNotifier<Settings> { | |
| late SharedPreferences _prefs; | |
| SettingsNotifier() : super(const Settings()) { | |
| _loadSettings(); | |
| } | |
| Future<void> _loadSettings() async { | |
| _prefs = await SharedPreferences.getInstance(); | |
| state = Settings( | |
| useKg: _prefs.getBool('useKg') ?? true, | |
| themeMode: ThemeMode.values[_prefs.getInt('themeMode') ?? 0], | |
| showDemoData: _prefs.getBool('showDemoData') ?? false, | |
| ); | |
| } | |
| Future<void> setUseKg(bool value) async { | |
| await _prefs.setBool('useKg', value); | |
| state = state.copyWith(useKg: value); | |
| } | |
| Future<void> setThemeMode(ThemeMode mode) async { | |
| await _prefs.setInt('themeMode', mode.index); | |
| state = state.copyWith(themeMode: mode); | |
| } | |
| Future<void> setShowDemoData(bool value) async { | |
| await _prefs.setBool('showDemoData', value); | |
| state = state.copyWith(showDemoData: value); | |
| } | |
| Future<void> resetSettings() async { | |
| await _prefs.clear(); | |
| state = const Settings(); | |
| } | |
| } |