loadPages method

Future<void> loadPages(
  1. int index,
  2. int? pageNumber
)

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;
  }
}