Summary
ThemeController — единый источник активной темы: brightness, preset, путь к файлу, overrides; персистенция через AppSettings.
Проблема
Нет runtime-смены темы. AppSettings уже хранит sqlEditorFontSize и использует AppSettingsRevision.listenable — нужен тот же паттерн.
Решение
API (черновик)
class ThemeController extends ChangeNotifier {
QueryaTheme get activeTheme;
ThemeMode get themeMode; // light | dark | system
String ? get importedThemePath;
Map <String , String >? get userColorOverrides;
Future <void > setThemeMode (ThemeMode mode);
Future <void > setPreset (QueryaThemePreset preset);
Future <void > importThemeFromFile (String path);
Future <void > setColorOverride (String vscodeKey, String ? hex);
Future <void > resetToDefaults ();
}
Storage keys (SQLite/local)
theme_mode
theme_preset (querya_dark, querya_light, imported)
theme_import_path
theme_overrides_json
Merge pipeline
QueryaTheme.darkDefault (или light)
Deep merge colors из импортированного manifest (Theme: парсер VS Code theme JSON/JSONC #39 )
Deep merge user overrides (Theme: пользовательские color overrides (deep merge) #45 )
Build QueryaTheme + notify listeners
Acceptance criteria
Зависимости
Оценка
~2–3 дня
Summary
ThemeController— единый источник активной темы: brightness, preset, путь к файлу, overrides; персистенция черезAppSettings.Проблема
Нет runtime-смены темы.
AppSettingsуже хранитsqlEditorFontSizeи используетAppSettingsRevision.listenable— нужен тот же паттерн.Решение
API (черновик)
Storage keys (SQLite/local)
theme_modetheme_preset(querya_dark,querya_light,imported)theme_import_paththeme_overrides_jsonMerge pipeline
QueryaTheme.darkDefault(или light)colorsиз импортированного manifest (Theme: парсер VS Code theme JSON/JSONC #39)QueryaTheme+ notify listenersAcceptance criteria
AppSettingsRevisionили отдельныйThemeRevision.listenableтриггерит rebuild корняЗависимости
Оценка
~2–3 дня