loadQuran method
Future<void>
loadQuran(
{ - int quranPages = QuranRepository.hafsPagesNumber,
})
Implementation
Future<void> loadQuran(
{int quranPages = QuranRepository.hafsPagesNumber}) async {
// حفظ آخر صفحة
lastPage = _quranRepository.getLastPage() ?? 1;
if (lastPage != 0) {
jumpToPage(lastPage - 1);
}
// إذا كانت الصفحات لم تُملأ أو العدد غير متطابق
if (staticPages.isEmpty || quranPages != staticPages.length) {
// إنشاء صفحات فارغة
staticPages.value = List.generate(
quranPages,
(index) => QuranPageModel(pageNumber: index + 1, ayahs: [], lines: []),
);
final quranJson = await _quranRepository.getQuran();
int hizb = 1;
int surahsIndex = 1;
List<AyahModel> thisSurahAyahs = [];
for (int i = 0; i < quranJson.length; i++) {
// تحويل كل json إلى AyahModel
final ayah = AyahModel.fromOriginalJson(quranJson[i]);
if (ayah.surahNumber != surahsIndex) {
surahs.last.endPage = ayahs.last.page;
surahs.last.ayahs = thisSurahAyahs;
surahsIndex = ayah.surahNumber!;
thisSurahAyahs = [];
}
ayahs.add(ayah);
thisSurahAyahs.add(ayah);
staticPages[ayah.page - 1].ayahs.add(ayah);
if (ayah.text.contains('۞')) {
staticPages[ayah.page - 1].hizb = hizb++;
quranStops.add(ayah.page);
}
if (ayah.text.contains('۩')) {
staticPages[ayah.page - 1].hasSajda = true;
}
if (ayah.ayahNumber == 1) {
ayah.text = ayah.text.replaceAll('۞', '');
staticPages[ayah.page - 1].numberOfNewSurahs++;
surahs.add(SurahModel(
surahNumber: ayah.surahNumber!,
englishName: ayah.englishName!,
arabicName: ayah.arabicName!,
ayahs: [],
isDownloadedFonts: false,
));
surahsStart.add(ayah.page - 1);
}
}
surahs.last.endPage = ayahs.last.page;
surahs.last.ayahs = thisSurahAyahs;
// ملء الأسطر (lines) لكل صفحة
for (QuranPageModel staticPage in staticPages) {
List<AyahModel> ayas = [];
for (AyahModel aya in staticPage.ayahs) {
if (aya.ayahNumber == 1 && ayas.isNotEmpty) {
ayas.clear();
}
if (aya.text.contains('\n')) {
final lines = aya.text.split('\n');
for (int i = 0; i < lines.length; i++) {
bool centered = false;
if ((aya.centered ?? false) && i == lines.length - 2) {
centered = true;
}
final a = AyahModel.fromAya(
ayah: aya,
aya: lines[i],
ayaText: lines[i],
centered: centered,
);
ayas.add(a);
if (i < lines.length - 1) {
staticPage.lines.add(LineModel([...ayas]));
ayas.clear();
}
}
} else {
ayas.add(aya);
}
}
// إذا بقيت آيات في ayas بعد آخر سطر
if (ayas.isNotEmpty) {
staticPage.lines.add(LineModel([...ayas]));
}
ayas.clear();
}
update();
}
}