Skip to content

Theme: ThemeController и персистенция в AppSettings #40

Description

@ZhuchkaTriplesix

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

  1. QueryaTheme.darkDefault (или light)
  2. Deep merge colors из импортированного manifest (Theme: парсер VS Code theme JSON/JSONC #39)
  3. Deep merge user overrides (Theme: пользовательские color overrides (deep merge) #45)
  4. Build QueryaTheme + notify listeners

Acceptance criteria

  • Смена preset переживает restart приложения
  • AppSettingsRevision или отдельный ThemeRevision.listenable триггерит rebuild корня
  • Импорт битого файла — user-visible error, fallback на default
  • Unit-тесты merge pipeline

Зависимости

Оценка

~2–3 дня

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestthemeTheming, colors, VS Code themes

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions