cpd_2022_zi/lib/services/settings_service.dart

97 lines
3.9 KiB
Dart

import 'package:shared_preferences/shared_preferences.dart';
import 'package:smoke_cess_app/models/settings.dart';
import 'package:smoke_cess_app/services/json_service.dart';
//access group setting which was saved in local storage
Future<int?> getGroup() => _getIntSetting('group');
Future<List<String>?> getRelapseCategories() =>
_getStringListSetting('relapse_categories');
Future<List<String>?> getSleepQueryDaysCategories() =>
_getStringListSetting('sleep_query_days');
Future<int?> getSleepQueryHours() => _getIntSetting('sleep_query_hours');
Future<int?> getSleepQueryMinutes() => _getIntSetting('sleep_query_minutes');
Future<List<String>?> getMoodQueryDaysCategories() =>
_getStringListSetting('mood_query_days');
Future<int?> getMoodQueryHours() => _getIntSetting('mood_query_hours');
Future<int?> getMoodQueryMinutes() => _getIntSetting('mood_query_minutes');
Future<int?> getChessHours() => _getIntSetting('chess_hours');
Future<int?> getChessMinutes() => _getIntSetting('chess_minutes');
Future<String?> getStartDay() => _getStringSetting('startedAt');
void _setIntSetting(String settingKey, int settingValue) =>
SharedPreferences.getInstance()
.then((pref) => pref.setInt(settingKey, settingValue));
Future<int?> _getIntSetting(String settingKey) =>
SharedPreferences.getInstance().then((pref) => pref.getInt(settingKey));
void _setStringSetting(String settingKey, String settingValue) =>
SharedPreferences.getInstance()
.then((pref) => pref.setString(settingKey, settingValue));
Future<String?> _getStringSetting(String settingKey) =>
SharedPreferences.getInstance().then((pref) => pref.getString(settingKey));
void _setStringListSetting(String settingKey, List<String> list) =>
SharedPreferences.getInstance()
.then((pref) => pref.setStringList(settingKey, list));
Future<List<String>?> _getStringListSetting(String settingKey) =>
SharedPreferences.getInstance()
.then((pref) => pref.getStringList(settingKey));
Future<void> loadSettingsFromLocalJSON() async {
Map<String, dynamic> configJSON = await loadLocalConfigJSON();
Settings settings = Settings.fromJson(configJSON);
saveSettings(settings);
}
void saveSettings(Settings settings) {
_setIntSetting('group', settings.group);
_setStringListSetting('relapse_categories', settings.relapseCategories!);
_setStringListSetting('mood_query_days', settings.moodQuery!.days!);
_setIntSetting('mood_query_hours', settings.moodQuery!.hours!);
_setIntSetting('mood_query_minutes', settings.moodQuery!.minutes!);
_setStringListSetting('sleep_query_days', settings.sleepQuery!.days!);
_setIntSetting('sleep_query_hours', settings.sleepQuery!.hours!);
_setIntSetting('sleep_query_minutes', settings.sleepQuery!.minutes!);
_setStringSetting('startedAt', settings.startedAt.toIso8601String());
if (settings.chessTime != null) {
_setIntSetting('chess_hours', settings.chessTime!.hours!);
_setIntSetting('chess_minutes', settings.chessTime!.minutes!);
}
}
Future<Settings?> loadSettings() async {
int? group = await getGroup();
List<String>? relapseCategories = await getRelapseCategories();
int? moodHours = await getMoodQueryHours();
int? moodMinutes = await getMoodQueryMinutes();
List<String>? moodDays = await getMoodQueryDaysCategories();
int? sleepHours = await getSleepQueryHours();
int? sleepMinutes = await getSleepQueryMinutes();
List<String>? sleepDays = await getSleepQueryDaysCategories();
int? chessHours = await getChessHours();
int? chessMinutes = await getChessMinutes();
DateTime startedAt =
DateTime.parse(await getStartDay() ?? DateTime.now().toIso8601String());
if (group != null) {
return Settings(
group,
relapseCategories,
QueryConfig(moodHours, moodMinutes, moodDays),
QueryConfig(sleepHours, sleepMinutes, sleepDays),
TimeConfig(chessHours, chessMinutes),
startedAt);
}
return null;
}