claude refactor

This commit is contained in:
2026-05-04 13:54:39 +02:00
parent 9973f12733
commit 551c1bf1fa
125 changed files with 4484 additions and 2544 deletions
-80
View File
@@ -1,80 +0,0 @@
import 'dart:convert';
import 'dart:developer';
import 'package:easy_debounce/easy_debounce.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../view/settings/defaultSettings.dart';
import 'settings.dart';
class SettingsProvider extends ChangeNotifier {
static const String _fieldName = 'settings';
late SharedPreferences _storage;
late Settings _settings = DefaultSettings.get();
Settings val({bool write = false}) {
if(write) {
notifyListeners();
EasyDebounce.debounce(
_fieldName,
const Duration(milliseconds: 500),
update
);
}
return _settings;
}
SettingsProvider() {
_readFromStorage();
}
Future<void> reset() async {
_storage = await SharedPreferences.getInstance();
_storage.remove(_fieldName);
_settings = DefaultSettings.get();
await update();
notifyListeners();
}
Future<void> _readFromStorage() async {
_storage = await SharedPreferences.getInstance();
try {
_settings = Settings.fromJson(jsonDecode(_storage.getString(_fieldName)!));
} catch(exception) {
try {
log('Settings were changed, trying to recover from old Settings: ${exception.toString()}');
_settings = Settings.fromJson(_mergeSettings(jsonDecode(_storage.getString(_fieldName)!), DefaultSettings.get().toJson()));
log('Settings recovered successfully: ${_settings.toJson().toString()}');
} catch(exception) {
log('Settings are defective and not recoverable, using defaults: ${exception.toString()}');
_settings = DefaultSettings.get();
log('Settings were reset to defaults!');
}
}
notifyListeners();
}
Future<void> update() async {
await _storage.setString(_fieldName, jsonEncode(_settings.toJson()));
}
Map<String, dynamic> _mergeSettings(Map<String, dynamic> oldMap, Map<String, dynamic> newMap) {
var mergedMap = Map<String, dynamic>.from(newMap);
oldMap.forEach((key, value) {
if (mergedMap.containsKey(key)) {
if (value is Map<String, dynamic> && mergedMap[key] is Map<String, dynamic>) {
mergedMap[key] = _mergeSettings(value, mergedMap[key]);
} else {
mergedMap[key] = value;
}
}
});
return mergedMap;
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
import 'package:json_annotation/json_annotation.dart';
import '../../view/pages/timetable/timetableNameMode.dart';
import 'timetable_name_mode.dart';
part 'timetableSettings.g.dart';
@@ -0,0 +1,18 @@
import 'package:flutter/material.dart';
import '../../widget/dropdownDisplay.dart';
enum TimetableNameMode { name, longName, alternateName }
class TimetableNameModes {
static DropdownDisplay getDisplayOptions(TimetableNameMode mode) {
switch (mode) {
case TimetableNameMode.name:
return DropdownDisplay(icon: Icons.device_unknown_outlined, displayName: 'Name');
case TimetableNameMode.longName:
return DropdownDisplay(icon: Icons.perm_device_info_outlined, displayName: 'Langname');
case TimetableNameMode.alternateName:
return DropdownDisplay(icon: Icons.on_device_training_outlined, displayName: 'Kurzform');
}
}
}