init method

Future<void> init()

Initialize the theme manager.

This should be called during app startup after registerThemes. Handles migration from shared_preferences and loads saved theme.

Implementation

Future<void> init() async {
  if (_isInitialized) return;

  // Add observer for system brightness changes
  WidgetsBinding.instance.addObserver(this);

  // Load saved preferences
  final savedThemeId = await _storage.readThemeId();
  final savedFollowSystem = await _storage.readFollowSystem();
  final savedPreferredLight = await _storage.readPreferredLightThemeId();
  final savedPreferredDark = await _storage.readPreferredDarkThemeId();

  // Load preferred themes
  _preferredLightThemeId = savedPreferredLight;
  _preferredDarkThemeId = savedPreferredDark;

  // Determine if this is first launch (no saved preferences)
  final isFirstLaunch = savedThemeId == null && savedFollowSystem == null;

  if (savedFollowSystem != null) {
    _followSystemTheme = savedFollowSystem;
  }

  if (savedThemeId != null && savedThemeId.isNotEmpty) {
    // Use saved theme if it exists in registered themes
    final themeExists = _themes.any((t) => t.id == savedThemeId);
    if (themeExists) {
      _setThemeInternal(savedThemeId, notify: true, persist: false);
    }
  } else if (isFirstLaunch && _initialThemeId != null) {
    // First launch: use initialThemeId if provided
    final themeExists = _themes.any((t) => t.id == _initialThemeId);
    if (themeExists) {
      _setThemeInternal(_initialThemeId!, notify: true, persist: true);
    }
  } else if (_followSystemTheme) {
    // Auto-detect from system brightness
    _applySystemTheme(notify: true, persist: true);
  }

  _isInitialized = true;
}