loadPages method
Implementation
Future<void> loadPages(int index, int? pageNumber) async {
if (appState.isLoading || appState.document == null) return;
appState.isLoading = true;
try {
int pagesToLoad;
if (pageNumber == null) {
if (index == 0 || index == 1) {
pagesToLoad = 6;
} else {
pagesToLoad = 4 + appState.pageImages.length;
}
} else {
pagesToLoad = 4 + pageNumber;
}
for (int i = 0; i < pagesToLoad; i++) {
if (appState.alreadyAdded.any((element) => element == i)) {
continue;
}
if (i >= appState.document!.pagesCount) {
continue;
}
final newAlreadyAdded = List<int>.from(appState.alreadyAdded);
newAlreadyAdded.add(i);
appState.alreadyAdded = newAlreadyAdded;
final page = await appState.document!.getPage(i + 1);
/// Render at much higher resolution for better quality
final image = await page.render(
width: page.width * 2,
height: page.height * 2,
format: PdfPageImageFormat.png,
quality: 100,
forPrint: true,
);
if (image != null) {
final newPageImages = List<PdfPageImage>.from(appState.pageImages);
newPageImages.add(image);
if (i == 0 && appState.currentTotalPages != 2) {
newPageImages.add(image);
}
if (appState.document!.pagesCount == (i + 1)) {
if ((i + 1) % 2 % 2 != 0) {
newPageImages.add(image);
appState.showLastPage = false;
}
}
appState.pageImages = newPageImages;
}
await page.close();
}
appState.animationComplete = false;
if (pageNumber != null) {
appState.currentPage = (pageNumber / 2).toInt();
appState.currentPageComplete = appState.currentPage;
}
} finally {
appState.isLoading = false;
}
}