init static method

Future<void> init({
  1. Map<int, List<BookmarkModel>>? userBookmarks,
  2. bool overwriteBookmarks = false,
})

init تقوم بتهيئة القرآن ويجب استدعاؤها قبل البدء في استخدام الحزمة

init initializes the FlutterQuran, and must be called before starting using the package

Implementation

static Future<void> init(
    {Map<int, List<BookmarkModel>>? userBookmarks,
    bool overwriteBookmarks = false}) async {
  if (_isInitialized) return;

  await GetStorage.init();

  // تهيئة backend الصوت للويندوز قبل إنشاء أي AudioPlayer
  // Initialize Windows audio backend before constructing any AudioPlayer
  if (!kIsWeb) {
    if (Platform.isWindows) {
      JustAudioMediaKit.ensureInitialized(windows: true);
    }
  }

  // Initialize state values
  final storage = GetStorage();
  final storageConstants = _StorageConstants();

  /// Initialize SurahAudioController
  QuranCtrl.instance;
  await _initTafsir();

  quranCtrl.state.isFontDownloaded.value =
      storage.read(storageConstants.isDownloadedCodeV4Fonts) ?? false;
  quranCtrl.state.isBold.value =
      storage.read(storageConstants.isBold) ?? false;
  quranCtrl.state.fontsSelected.value =
      storage.read(storageConstants.fontsSelected) ?? 0;
  quranCtrl.state.fontsDownloadedList.value = (storage
          .read<List<dynamic>>(storageConstants.fontsDownloadedList)
          ?.cast<int>() ??
      []);

  if (!kIsWeb) {
    QuranCtrl.instance.deleteOldFonts();
  }

  // Load data in parallel
  final futures = <Future<void>>[
    QuranCtrl.instance.loadQuranDataV1(),
    QuranCtrl.instance.loadQuranDataV3(),
    QuranCtrl.instance.fetchSurahs(),
  ];

  await Future.wait<void>(futures);

  /// must be initilized after QuranCtrl, because it uses it
  AudioCtrl.instance;

  // تسجيل الخطوط المحفوظة دفعة واحدة في الخلفية إن كانت متاحة
  // if (kIsWeb) {
  //   // على الويب: لا تنزيلات مسبقة. سجّل فقط الصفحات التي تم تحميلها سابقًا (إن وُجدت)
  //   final stored = storage
  //           .read<List<dynamic>>(storageConstants.loadedFontPages)
  //           ?.cast<int>() ??
  //       const <int>[];
  //   if (stored.isNotEmpty) {
  //     Future(() => QuranCtrl.instance
  //         .loadPersistedFontsBulk(pages: stored, batchSize: 16));
  //   }
  // } else if (quranCtrl.state.isFontDownloaded.value) {
  //   // على المنصات الأخرى: سجّل الصفحات المحفوظة فقط (دع الدالة تقرأ من التخزين)
  //   QuranCtrl.instance.loadPersistedFontsBulk();
  // }

  // Initialize bookmarks
  BookmarksCtrl.instance.initBookmarks(
      userBookmarks: userBookmarks, overwrite: overwriteBookmarks);

  _isInitialized = true;
}