initialize static method
Initialize all enabled services based on config.
Safe to call multiple times — subsequent calls are no-ops. Throws if a required service fails to initialize.
Implementation
static Future<void> initialize(QuranKitConfig config) async {
if (_initialized) return;
_config = config;
final tag = 'QuranKit';
// ── 1. Inject custom storage if provided ──
if (config.storage != null) {
_injectStorage(config.storage!);
}
// ── 2. Core metadata (always required) ──
log('Initializing QuranMetadata...', name: tag);
await QuranMetadata.instance.init();
// ── 3. Font pipeline ──
if (config.fontBaseUrl.isNotEmpty) {
log('Configuring FontDownloader: ${config.fontBaseUrl}', name: tag);
FontDownloader.instance.configure(baseUrl: config.fontBaseUrl);
}
// ── 4. Settings (always needed — loads ValueNotifiers) ──
log('Loading QuranSettingsService...', name: tag);
await QuranSettingsService.instance.loadSettings();
// Apply config defaults to settings only if they haven't been saved yet
final settings = QuranSettingsService.instance;
if (config.defaultEditionId != 'ar-uthmani') {
await settings.setPreferredTranslation(config.defaultEditionId);
}
if (config.defaultTafsirId != 'al-tabari') {
await settings.setPreferredTafsir(config.defaultTafsirId);
}
if (config.defaultQiraa != 'hafs') {
await settings.setPreferredQiraa(config.defaultQiraa);
}
if (config.readingGoal != 20) {
await settings.setReadingGoal(config.readingGoal);
}
if (config.showTajweed != true) {
await settings.setShowTajweed(config.showTajweed);
}
// ── 5. Audio ──
if (config.enableAudio) {
log('Initializing QuranAudioService...', name: tag);
await QuranAudioService.instance.init();
if (config.defaultReciterIndex != 0) {
QuranAudioService.instance.setReciter(config.defaultReciterIndex);
}
}
// ── 6. Text / translations ──
log('Initializing QuranTextService...', name: tag);
await QuranTextService.instance.init();
// ── 7. Tafsir ──
if (config.enableTafsir) {
log('Initializing QuranTafsirService...', name: tag);
await QuranTafsirService.instance.init();
}
// ── 8. Word-by-word ──
if (config.enableWordByWord) {
log('Initializing QuranWordService...', name: tag);
await QuranWordService.instance.init();
}
// ── 9. Asbab al-nuzul ──
if (config.enableAsbabNuzul) {
log('Initializing QuranAsbabNuzulService...', name: tag);
await QuranAsbabNuzulService.instance.init();
}
// ── 10. Auto night mode ──
if (config.enableAutoNightMode) {
log('Enabling QuranAutoNightMode...', name: tag);
await QuranAutoNightMode.instance.setEnabled(true);
if (config.nightStartHour != 18 || config.nightEndHour != 6) {
await QuranAutoNightMode.instance
.setNightHours(config.nightStartHour, config.nightEndHour);
}
}
// ── 11. Default theme ──
if (config.defaultTheme != null) {
QuranAutoNightMode.instance.currentTheme.value = config.defaultTheme!;
}
_initialized = true;
log('QuranKit initialized successfully ✓', name: tag);
}