getCompleteResultQuranData method

Future<List<QuranPage>> getCompleteResultQuranData()

Implementation

Future<List<QuranPage>> getCompleteResultQuranData() async {
  var pages = await getCompleteQuranAsset();
  List<QuranPage> resultedPage = [];

  for (var pageIndex = 0; pageIndex < pages.length; pageIndex++) {
    var page = pages[pageIndex];
    List<QuranLineResultModel> lines = [
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
      QuranLineResultModel(words: []),
    ];
    var pageNumber = 0;

    for (var verseIndex = 0; verseIndex < page.verses!.length; verseIndex++) {
      var verse = page.verses![verseIndex];

      for (var wordIndex = 0; wordIndex < verse.words!.length; wordIndex++) {
        // add line word
        lines[verse.words![wordIndex].lineNumber! - 1]
            .words
            .add(verse.words![wordIndex]);

        //set page number
        if (pageNumber == 0) {
          pageNumber = lines[verse.words![wordIndex].lineNumber! - 1]
              .words[wordIndex]
              .pageNumber!;
        }

        //get surah number
        lines[verse.words![wordIndex].lineNumber! - 1].surahNum = int.parse(
            verse.verseKey!.substring(0, (verse.verseKey!.indexOf(':'))));
      }
    }

    for (var lineIndex = 0; lineIndex < lines.length; lineIndex++) {
      // check if begining of surah or not

      // exception
      // Al Fatihah Exception
      if ((lineIndex != lines.length - 1) && pageNumber == 1) {
        // surah begining
        lines[lineIndex].isSurahBegining = true;
      }

      if (lines[lineIndex].words.isEmpty) {
        // For surah with 14 lines, 1st lines basmalah
        if (lineIndex == 0 &&
            lines[lineIndex + 1].words.isNotEmpty &&
            pageNumber != 1) {
          lines[lineIndex].isBasmallah = true;
          lines[lineIndex].isSurahBegining = false;
          lines.insert(lineIndex,
              QuranLineResultModel(words: [], isSurahBegining: true));
        }

        if ((lineIndex != lines.length - 1) &&
            lines[lineIndex + 1].words.isEmpty) {
          // surah begining
          lines[lineIndex].isSurahBegining = true;

          // Set basmalah
          if (pageNumber != 1 || pageNumber != 187) {
            lines[lineIndex + 1].isBasmallah = true;
          }

          // exception
          if (pageNumber == 2 && lineIndex > 2) {
            lines[lineIndex].isSurahBegining = false;
            lines[lineIndex + 1].isBasmallah = false;
          }
          if (pageNumber == 1 && lineIndex > 2) {
            lines[lineIndex].isSurahBegining = false;
            lines[lineIndex + 1].isBasmallah = false;
          }
        }
      }

      //check stretch

      if (lines[lineIndex].words.map((e) => e.qpcUthmaniHafs).join().length <
              55 &&
          lineIndex == (lines.length - 1)) {
        lines[lineIndex].isUsingLineStretch = false;
      }
      if (pageNumber == 1 || pageNumber == 2) {
        lines[lineIndex].isUsingLineStretch = false;
      }
      if (pageNumber >= 600) {
        lines[lineIndex].isUsingLineStretch = false;
      }

      // get font size
      lines[lineIndex].wordSpacing = getWordSpacing(lines[lineIndex].words);
    }

    resultedPage.add(QuranPage(
        lines: lines,
        pageNumber: pageNumber,
        verses: QuranVersesResultModel(verses: page.verses!)));
  }
  return resultedPage;
}