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();
  Get.put(InternetConnectionService(), permanent: true);
  Get.put(InternetConnectionController(), permanent: true);

  // تهيئة 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 (quranCtrl.state.fontsSelected.value == 0) {
  //   final currentPage =
  //       (GetStorage().read<int>('lastPage') ?? 1).clamp(1, 604);
  //   QuranFontsService.ensurePagesLoaded(currentPage, radius: 5).then((_) {
  //     // quranCtrl.update();
  //     quranCtrl.update(['_pageViewBuild']);
  //     // تحميل بقية الصفحات في الخلفية
  //     QuranFontsService.loadRemainingInBackground(
  //       startNearPage: currentPage,
  //       progress: quranCtrl.state.fontsLoadProgress,
  //       ready: quranCtrl.state.fontsReady,
  //     ).then((_) {
  //       // quranCtrl.update();
  //       quranCtrl.update(['_pageViewBuild']);
  //     });
  //   });
  // }

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

  // Load data in parallel
  final futures = <Future<void>>[
    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;
}