kettlebell-tracker/lib/providers/settings_provider.dart

69 lines
2.2 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SettingsState {
final int trainingTimeMinutes;
final double weightLeft;
final double weightRight;
final int goalSets;
final String initialProgram;
SettingsState({
this.trainingTimeMinutes = 20,
this.weightLeft = 16.0,
this.weightRight = 16.0,
this.goalSets = 5,
this.initialProgram = 'giant_1.0',
});
SettingsState copyWith({
int? trainingTimeMinutes,
double? weightLeft,
double? weightRight,
int? goalSets,
String? initialProgram,
}) {
return SettingsState(
trainingTimeMinutes: trainingTimeMinutes ?? this.trainingTimeMinutes,
weightLeft: weightLeft ?? this.weightLeft,
weightRight: weightRight ?? this.weightRight,
goalSets: goalSets ?? this.goalSets,
initialProgram: initialProgram ?? this.initialProgram,
);
}
}
class SettingsNotifier extends StateNotifier<SettingsState> {
SettingsNotifier() : super(SettingsState());
Future<void> loadSettings() async {
final prefs = await SharedPreferences.getInstance();
state = SettingsState(
trainingTimeMinutes: prefs.getInt('trainingTimeMinutes') ?? 20,
weightLeft: prefs.getDouble('weightLeft') ?? 16.0,
weightRight: prefs.getDouble('weightRight') ?? 16.0,
goalSets: prefs.getInt('goalSets') ?? 5,
initialProgram: prefs.getString('initialProgram') ?? 'giant_1.0',
);
}
Future<void> saveSettings(SettingsState newSettings) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt('trainingTimeMinutes', newSettings.trainingTimeMinutes);
await prefs.setDouble('weightLeft', newSettings.weightLeft);
await prefs.setDouble('weightRight', newSettings.weightRight);
await prefs.setInt('goalSets', newSettings.goalSets);
await prefs.setString('initialProgram', newSettings.initialProgram);
state = newSettings;
}
Future<void> updateSettings(SettingsState newSettings) async {
await saveSettings(newSettings);
}
}
final settingsProvider = StateNotifierProvider<SettingsNotifier, SettingsState>(
(ref) {
return SettingsNotifier();
},
);