getQpcFlowBlocksForPage method
يعيد كتل العرض المتدفق (flowing) لصفحة — تجمّع segments حسب الآية. تُستخدم في وضع التكبير حيث لا نحتاج لتحديد موقع كل كلمة.
Implementation
List<QpcV4RenderBlock> getQpcFlowBlocksForPage(int pageNumber) {
final lineBlocks = getQpcLayoutBlocksForPageSync(pageNumber);
if (lineBlocks.isEmpty) return const [];
final result = <QpcV4RenderBlock>[];
final ayahSegmentsMap = <int, List<QpcV4WordSegment>>{};
final ayahOrder = <int>[];
for (final block in lineBlocks) {
if (block is QpcV4SurahHeaderBlock || block is QpcV4BasmallahBlock) {
// تفريغ الآيات المجمّعة قبل إضافة الهيدر/البسملة
for (final uq in ayahOrder) {
final segs = ayahSegmentsMap[uq]!;
final first = segs.first;
result.add(QpcV4AyahFlowBlock(
ayahUq: uq,
surahNumber: first.surahNumber,
ayahNumber: first.ayahNumber,
segments: segs,
));
}
ayahSegmentsMap.clear();
ayahOrder.clear();
result.add(block);
continue;
}
if (block is QpcV4AyahLineBlock) {
for (final seg in block.segments) {
if (!ayahSegmentsMap.containsKey(seg.ayahUq)) {
ayahSegmentsMap[seg.ayahUq] = [];
ayahOrder.add(seg.ayahUq);
}
ayahSegmentsMap[seg.ayahUq]!.add(seg);
}
}
}
// تفريغ الآيات المتبقية
for (final uq in ayahOrder) {
final segs = ayahSegmentsMap[uq]!;
final first = segs.first;
result.add(QpcV4AyahFlowBlock(
ayahUq: uq,
surahNumber: first.surahNumber,
ayahNumber: first.ayahNumber,
segments: segs,
));
}
return result;
}