init static method
Future<void>
init({
- Map<
int, List< ? userBookmarks,BookmarkModel> > - 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;
}