initialize method

Future<void> initialize({
  1. ThemeSeed? seed,
})

Initializes the manager.

Configuration precedence:

Built-in defaults ↓ Bundled seed ↓ Saved runtime configuration

Implementation

Future<void> initialize({ThemeSeed? seed}) async {
  if (_initialized) {
    return;
  }

  // Start with package defaults.
  var baseConfiguration = ThemeDefaults.defaultConfig();

  // Apply the application's bundled seed.
  if (seed != null) {
    final seedJson = await seed.loadJson();

    if (seedJson != null) {
      try {
        final decoded = jsonDecode(seedJson);

        if (decoded is Map) {
          final seedConfig = ThemeConfig.fromJson(
            Map<String, dynamic>.from(decoded),
          );

          baseConfiguration = _mergeConfigurations(
            baseConfiguration,
            seedConfig,
          );
        }
      } catch (_) {
        // Invalid seed falls back to built-in defaults.
      }
    }
  }

  _baseConfig = baseConfiguration;

  // Apply persisted runtime configuration.
  final savedConfig = await _storage.load();

  if (savedConfig != null) {
    _config = _mergeConfigurations(_baseConfig, savedConfig);
  } else {
    _config = _copyConfig(_baseConfig);
  }

  _initialized = true;

  notifyListeners();
}