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: [] ), ); } }