Client/lib/storage/base/settingsProvider.dart

54 lines
1.3 KiB
Dart

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:marianum_mobile/storage/gradeAverages/gradeAveragesSettings.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'settings.dart';
class SettingsProvider extends ChangeNotifier {
static const String _fieldName = "settings";
late SharedPreferences _storage;
late Settings _settings = _defaults();
Settings val({bool write = false}) {
if(write) {
notifyListeners();
Future.delayed(const Duration(milliseconds: 300)).then((_) => update());
}
return _settings;
}
SettingsProvider() {
init();
}
void init() async {
_storage = await SharedPreferences.getInstance();
if(_storage.containsKey(_fieldName)) {
log("Settings from disk: ${_storage.getString(_fieldName)}");
_settings = Settings.fromJson(jsonDecode(_storage.getString(_fieldName)!));
} else {
_settings = _defaults();
}
notifyListeners();
}
void update() async {
await _storage.setString(_fieldName, jsonEncode(_settings.toJson()));
}
Settings _defaults() {
return Settings(
appTheme: ThemeMode.system,
devToolsEnabled: false,
gradeAveragesSettings: GradeAveragesSettings(
useGradeSystem: true,
inputs: []
),
);
}
}