initialize method
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();
}