- import 'dart:collection';
- import 'dart:convert';
- import 'dart:math';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:get/get_connect/http/src/utils/utils.dart';
- import 'package:gurbani_app/models/baani_lines_model.dart';
- import 'package:gurbani_app/models/calculated_items.dart';
- import 'package:gurbani_app/models/db_result.dart';
- import 'package:gurbani_app/models/history_item.dart';
- import 'package:gurbani_app/screens/settings.dart';
- import 'package:gurbani_app/services/nitnem_service.dart';
- import 'package:gurbani_app/services/reader.dart';
- import 'package:gurbani_app/utils/contexts.dart';
- import 'package:gurbani_app/utils/languages.dart';
- import 'package:gurbani_app/utils/spans.dart';
- import 'package:gurbani_app/utils/theme.dart';
- import 'package:gurbani_app/widgets/baani_view_widget.dart';
- import 'dart:math' as math;
- import 'package:flip_widget/flip_widget.dart';
- import 'package:gurbani_app/widgets/calculated_view_widget.dart';
- import 'package:gurbani_app/widgets/constraints.dart';
- import 'package:gurbani_app/widgets/helper.dart';
- import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import 'package:wakelock_plus/wakelock_plus.dart';
- //ToDo: This class has to be renamed because this won't be the homescreen
- // Future<void> updateGurbaniLists() async {
- // // print(_linesPerPage);
- // currentAng = await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo, loadSourceLines: true, lines: _linesPerPage, bookNo: _bookNo);
- // if(currentAng.baaniLines.isEmpty){
- // _sourcePageNo = _sourcePageNo + 1;
- // _previousChapterTotalPages.add(_pageNo > 1? _pageNo-1 :1);
- // _pageNo = 1;
- // currentAng = await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo, lines: _linesPerPage, bookNo: _bookNo);
- // }
- // nextAng = await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo + 1, lines: _linesPerPage, bookNo: _bookNo);
- // previousAng = _sourcePageNo ==1 && _pageNo ==1 ? DBResult(baaniLines: List.empty(), count: 0) : _sourcePageNo >=1 && _pageNo ==1 ? _previousChapterTotalPages.isEmpty ? DBResult(baaniLines: List.empty(), count: 0) : await Reader.getAngs(sourcePageNo: _sourcePageNo - 1,pageNo: _previousChapterTotalPages.last, lines: _linesPerPage) : await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo - 1, lines: _linesPerPage);
- // setState(() {});
- // }
- class PageScreen extends StatefulWidget {
- final int pageNo;
- final int bookNo;
- final bool isNitnem;
- // final bool isEnglishTransliteration;
- final int nitnemId;
- final bool searchView;
- final int searchedAng;
- final String title;
- final BaaniLineModel? searchedBaaniLine;
- const PageScreen(
- {super.key,
- required this.title,
- this.pageNo = 1,
- this.bookNo = 1,
- // this.isEnglishTransliteration = false,
- this.isNitnem = false,
- this.searchView = false,
- this.nitnemId = 1,
- this.searchedAng = 100,
- this.searchedBaaniLine});
- @override
- State<PageScreen> createState() => _PageScreenState();
- }
- const double _MinNumber = 0.008;
- double _clampMin(double v) {
- if (v < _MinNumber && v > -_MinNumber) {
- if (v >= 0) {
- v = _MinNumber;
- } else {
- v = -_MinNumber;
- }
- }
- return v;
- }
- class _PageScreenState extends State<PageScreen> {
- final GlobalKey<FlipWidgetState> _flipKey = GlobalKey();
- final GlobalKey myPageKey = GlobalKey();
- final TextEditingController _searchController = TextEditingController();
- DBResult currentAng =
- DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- DBResult previousAng =
- DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- DBResult nextAng =
- DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- DBResult searchedAng =
- DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- LinkedList<CalculatedItems> calculatedPages = LinkedList<CalculatedItems>();
- LinkedList<HistoryItem> _history = LinkedList<HistoryItem>();
- late SharedPreferences prefs;
- bool _showEnglishTransliteration = false;
- bool _showEnglishTranslation = false;
- bool _showPunjabiTranslation = false;
- bool _showPunjabiTeekaTranslation = false;
- bool _showHindiTranslation = false;
- bool _showHindiTeekaTranslation = false;
- bool nightmodevalue = false;
- bool _showFaridkotTeekaTranslation = false;
- bool _loadSourceLines = true;
- bool _isBookMarked = false;
- bool _initialized = false;
- bool _isbold = false;
- bool isbold = false;
- bool _searchviewm = false;
- Languages _language = Languages.Gurmukhi;
- int _loadedLines = 0;
- int _linesPerProcess = 20;
- double _extraBottomPadding = 0;
- bool _isDragging = false;
- bool _showSearch = false;
- int maxvalueofBook1 = 1430;
- int maxvalueofBook2 = 1428;
- String errorMessage = '';
- final ItemScrollController _itemScrollController = ItemScrollController();
- final ItemPositionsListener _itemPositionListener =
- ItemPositionsListener.create();
- //late Size size;
- Future<void> updateGurbaniLists() async {
- currentAng = await Reader.getAngs(
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo,
- loadSourceLines: _loadSourceLines,
- lines: _linesPerPage,
- bookNo: _bookNo);
- if (currentAng.baaniLines.isEmpty) {
- if (_loadSourceLines) {
- currentAng =
- DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- nextAng = DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- placeWidgetsToPage();
- setState(() {});
- _loadedLines = _linesPerProcess;
- return;
- }
- _sourcePageNo = _sourcePageNo + 1;
- _previousChapterTotalPages.add(_pageNo > 1 ? _pageNo - 1 : 1);
- _pageNo = 1;
- currentAng = await Reader.getAngs(
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo,
- lines: _linesPerPage,
- bookNo: _bookNo);
- // placeWidgetsToPage();
- } else {
- if (_loadSourceLines) {
- if (_loadedLines >= currentAng.count) {
- return;
- }
- placeWidgetsToPage();
- setState(() {});
- _loadedLines += _linesPerProcess;
- return;
- }
- }
- if (_loadedLines >= currentAng.count) {
- return;
- }
- placeWidgetsToPage();
- nextAng = await Reader.getAngs(
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo + 1,
- lines: _linesPerPage,
- bookNo: _bookNo);
- previousAng = _sourcePageNo == 1 && _pageNo == 1
- ? DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0)
- : _sourcePageNo >= 1 && _pageNo == 1
- ? _previousChapterTotalPages.isEmpty
- ? DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0)
- : await Reader.getAngs(
- sourcePageNo: _sourcePageNo - 1,
- pageNo: _previousChapterTotalPages.last,
- lines: _linesPerPage)
- : await Reader.getAngs(
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo - 1,
- lines: _linesPerPage);
- setState(() {
- // print("calcualated");
- // print(calculatedPages.length);
- });
- _loadedLines += _linesPerProcess;
- }
- double _getAppbarAndStatusBarHeight() {
- if (!_initialized) {
- return 0.0;
- }
- double h = AppBar().preferredSize.height +
- MediaQuery.of(context).padding.top +
- MediaQuery.of(context).padding.bottom +
- _extraBottomPadding;
- return h;
- }
- placeWidgetsToPage() {
- if (currentAng.baaniLines.isEmpty) {
- calculatedPages.clear();
- return;
- }
- TextSpan angSpan = getSpan("Ang");
- double height =
- getTextHeight(span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- double additionalHeight = 8.h;
- height += additionalHeight;
- CalculatedItems calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: 0,
- totalPages: 0,
- angNo: _sourcePageNo,
- // angNo: _pageNo,
- height: height);
- if (_loadedLines != 0) {
- calculatedItems = calculatedPages.last;
- height = calculatedItems.height;
- calculatedPages.last.unlink();
- }
- currentAng.baaniLines
- .skip(_loadedLines)
- .take(_linesPerProcess)
- .forEach((element) {
- if (_language == Languages.Both) {
- if (element.gurmukhi.isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.gurmukhi,
- style: baaniTextStyle(
- color: nightmodevalue ? blackColor : whiteColor,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- TextSpan span = getAsscciiSpan(element.gurmukhi,
- style: baaniTextStyle(
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- color: nightmodevalue ? blackColor : whiteColor,
- ));
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (element.hindiTransliteration != null &&
- (element.hindiTransliteration ?? "").isNotEmpty) {
- TextSpan span2 = getAsscciiSpan(element.hindiTransliteration,
- style: baaniTextStyle(
- color: nightmodevalue ? kButtonColor : klightbrown,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span2, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span2, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span2);
- } else {
- height += getTextHeight(
- span: span2, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span2);
- height += additionalHeight;
- printSizes(height);
- }
- }
- } else if (_language == Languages.Gurmukhi) {
- if (element.gurmukhi.isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.gurmukhi,
- style: baaniTextStyle(
- color: nightmodevalue ? blackColor : whiteColor,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- } else {
- if (element.hindiTransliteration != null &&
- (element.hindiTransliteration ?? "").isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.hindiTransliteration,
- style: baaniTextStyle(
- color: nightmodevalue ? kButtonColor : whiteColor,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- }
- //english transliteration
- if (_showEnglishTransliteration &&
- element.englishTransliteration != null &&
- (element.englishTransliteration ?? "").isNotEmpty) {
- // print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
- // print(element.englishTransliteration);
- // print(element.englishTransliteration?.replaceAll(RegExp(",|!|'|;"), ""));
- TextSpan span = getSpan(
- element.englishTransliteration?.replaceAll(RegExp(",|!|'|;"), ""),
- style: baaniTextStyle(
- color: nightmodevalue ? darkGreeenColor : kgoldyellowBackground,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showEnglishTranslation &&
- element.translationEnglish != null &&
- (element.translationEnglish ?? "").isNotEmpty) {
- TextSpan span = getSpan(element.translationEnglish,
- style: baaniTextStyle(
- color: nightmodevalue ? purpleColor : whiteColor,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showPunjabiTranslation &&
- element.translationPunjabi != null &&
- (element.translationPunjabi ?? "").isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.translationPunjabi,
- style: baaniTextStyle(
- color: nightmodevalue ? darkRedColor : klightgreen,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showPunjabiTeekaTranslation &&
- element.translationPunjabiTeeka != null &&
- (element.translationPunjabiTeeka ?? "").isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.translationPunjabiTeeka,
- style: baaniTextStyle(
- color: nightmodevalue ? kFbColor : kPinkColor,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showFaridkotTeekaTranslation &&
- element.translationFaridkotTeeka != null &&
- (element.translationFaridkotTeeka ?? "").isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.translationFaridkotTeeka,
- style: baaniTextStyle(
- color: nightmodevalue ? MongiaColor : klightbluee,
- fontWeight: _isbold ? FontWeight.bold : FontWeight.normal,
- ));
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showHindiTranslation &&
- element.translationHindi != null &&
- (element.translationHindi ?? "").isNotEmpty) {
- TextSpan span =
- getAsscciiSpan(element.translationHindi, style: baaniTextStyle());
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- if (_showHindiTeekaTranslation &&
- element.translationHindiTeeka != null &&
- (element.translationHindiTeeka ?? "").isNotEmpty) {
- TextSpan span = getAsscciiSpan(element.translationHindiTeeka,
- style: baaniTextStyle());
- if (height +
- _getAppbarAndStatusBarHeight() +
- getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w) >
- Contexts.size!.height) {
- calculatedItems.pageNo += 1;
- calculatedItems.totalPages += 1;
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- semiUpdate();
- height = getTextHeight(
- span: angSpan, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems = CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: calculatedItems.pageNo,
- totalPages: calculatedItems.totalPages,
- angNo: _sourcePageNo);
- height += additionalHeight;
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- } else {
- height += getTextHeight(
- span: span, maxWidth: Contexts.size!.width - 2 * 8.w);
- calculatedItems.textSpans.add(span);
- height += additionalHeight;
- printSizes(height);
- }
- }
- });
- if (calculatedItems.textSpans.isNotEmpty) {
- calculatedItems.height = height;
- calculatedPages.add(calculatedItems);
- }
- // change total pages of all calculated items to the length of calculated pages
- int p = 0;
- calculatedPages.forEach((element) {
- element.pageNo = p + 1;
- element.totalPages = calculatedPages.length;
- p++;
- });
- }
- printSizes(height) {
- // print("========== Sizes ===========");
- // print(size.height);
- // print(height + _getAppbarAndStatusBarHeight());
- }
- Future<void> getSearchedAng() async {
- setState(() {
- _isLoading = true;
- });
- searchedAng = await Reader.search(
- searchType: 1,
- searchText: widget.searchedAng.toString(),
- shabadId: widget.searchedBaaniLine?.shabadId,
- // angNo :
- // angno : widget.searchedAng,
- bookNo: widget.searchedBaaniLine == null
- ? widget.bookNo
- : widget.searchedBaaniLine!.orderId > 60555
- ? 2
- : 1);
- setState(() {
- _isLoading = false;
- });
- }
- Future<void> goToSearchPage() async {
- setState(() {
- _isLoading = true;
- });
- searchedAng = await Reader.search(
- searchType: 1,
- searchText: widget.searchedAng.toString(),
- shabadId: widget.searchedBaaniLine?.shabadId,
- // angno : widget.searchedAng,
- bookNo: widget.searchedBaaniLine == null
- ? widget.bookNo
- : widget.searchedBaaniLine!.orderId > 60555
- ? 2
- : 1);
- setState(() {
- _isLoading = false;
- });
- }
- isBookmarked() async {
- final prefs = SharedPreferences.getInstance();
- final List<BaaniLineModel>? storedItems = await prefs.then((value) => value
- .getStringList('myBookmarksList')
- ?.map((e) => BaaniLineModel.fromJson(jsonDecode(e)))
- .toList());
- if (storedItems != null) {
- if (storedItems.contains(widget.searchedBaaniLine)) {
- _isBookMarked = true;
- } else {
- _isBookMarked = false;
- }
- return;
- }
- _isBookMarked = false;
- }
- saveToBookmarks(BaaniLineModel baaniLine) async {
- final List<BaaniLineModel>? storedItems = prefs
- .getStringList('myBookmarksList')
- ?.map((e) => BaaniLineModel.fromJson(jsonDecode(e)))
- .toList();
- if (storedItems != null) {
- if (storedItems.contains(baaniLine)) {
- storedItems.remove(baaniLine);
- prefs.setStringList('myBookmarksList',
- storedItems.map((e) => jsonEncode(e.toJson())).toList());
- setState(() {
- _isBookMarked = false;
- });
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- content: const Text('Removed from bookmark'),
- duration: const Duration(seconds: 2),
- action: SnackBarAction(
- label: 'Close',
- onPressed: () {
- // Code to execute.
- },
- ),
- ),
- );
- return;
- }
- storedItems.add(baaniLine);
- prefs.setStringList('myBookmarksList',
- storedItems.map((e) => jsonEncode(e.toJson())).toList());
- // await isBookmarked();
- setState(() {
- _isBookMarked = true;
- });
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- content: const Text('Bookmarked'),
- duration: const Duration(seconds: 2),
- action: SnackBarAction(
- label: 'Close',
- onPressed: () {
- // Code to execute.
- },
- ),
- ),
- );
- } else {
- prefs.setStringList('myBookmarksList', [jsonEncode(baaniLine.toJson())]);
- setState(() {
- _isBookMarked = true;
- });
- }
- }
- Future<void> updateNitnemLists() async {
- // print(_linesPerPage);
- print(currentAng.count);
- // print("================================");
- // DateTime t = DateTime.now();
- if (currentAng.count == 0) {
- setState(() {
- _isLoading = true;
- });
- currentAng = await Reader.getNitnemAngs(nitnemId: _nitnemId);
- // currentAng = NitnemService.getNitnemById(id: _nitnemId);
- // placeWidgetsToPage();
- }
- if (currentAng.baaniLines.isEmpty) {
- currentAng = DBResult(baaniLines: LinkedList<BaaniLineModel>(), count: 0);
- placeWidgetsToPage();
- setState(() {
- _isLoading = false;
- });
- _loadedLines = 0;
- return;
- }
- // print( DateTime.now().millisecondsSinceEpoch - t.millisecondsSinceEpoch);
- if (_loadedLines >= currentAng.count) {
- return;
- }
- placeWidgetsToPage();
- // nextAng = await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo + 1, lines: _linesPerPage, bookNo: _bookNo);
- // previousAng = _sourcePageNo ==1 && _pageNo ==1 ? DBResult(baaniLines: List.empty(), count: 0) : _sourcePageNo >=1 && _pageNo ==1 ? _previousChapterTotalPages.isEmpty ? DBResult(baaniLines: List.empty(), count: 0) : await Reader.getAngs(sourcePageNo: _sourcePageNo - 1,pageNo: _previousChapterTotalPages.last, lines: _linesPerPage) : await Reader.getAngs(sourcePageNo: _sourcePageNo,pageNo: _pageNo - 1, lines: _linesPerPage);
- setState(() {
- _isLoading = false;
- });
- _loadedLines += _linesPerProcess;
- // if(_pageNo >1 && currentAng.baaniLines.length-1 < _linesPerPage*_pageNo){
- // // print("reducing page no");
- // // _pageNo -= 1;
- //
- // // _sourcePageNo += 1;
- // // return;
- // }
- }
- int _pageNo = 1;
- int _sourcePageNo = 1;
- int _linesPerPage = 10;
- int _bookNo = 1;
- bool _isNitnem = false;
- int _nitnemId = 1;
- // bool _searchviewm = false;
- bool _isLoading = false;
- bool? isLeftToRight;
- String? _title = '';
- List<int> _previousChapterTotalPages = <int>[];
- Offset _oldPosition = Offset.zero;
- @override
- void initState() {
- _sourcePageNo = widget.pageNo;
- _bookNo = widget.bookNo;
- // _isbold = widget.
- // _showEnglishTransliteration = widget.isEnglishTransliteration;
- _isNitnem = widget.isNitnem;
- _nitnemId = widget.nitnemId;
- _extraBottomPadding = 10.h;
- _title = widget.title;
- _searchController.clear();
- _searchviewm = widget.searchView;
- super.initState();
- // postFrameCallback();
- WidgetsBinding.instance.addPostFrameCallback((_) async {
- // await Future.delayed(Duration(milliseconds: 300));
- WakelockPlus.enable();
- prefs = await SharedPreferences.getInstance();
- _isbold = prefs.getBool("boldValue") ?? false;
- isbold = prefs.getBool("boldValue") ?? false;
- nightmodevalue = prefs.getBool("nightmodevalue") ?? false;
- print("$_isbold");
- _showEnglishTransliteration =
- prefs.getBool('showEnglishTransliteration') ?? false;
- _showEnglishTranslation = prefs.getBool('showEnglishTranslation') ?? true;
- _showPunjabiTranslation = prefs.getBool('showPunjabiTranslation') ?? true;
- _showPunjabiTeekaTranslation =
- prefs.getBool('showPunjabiTeekaTranslation') ?? false;
- _showHindiTranslation = prefs.getBool('showHindiTranslation') ?? false;
- _showHindiTeekaTranslation =
- prefs.getBool('showHindiTeekaTranslation') ?? false;
- _showFaridkotTeekaTranslation =
- prefs.getBool('showFaridkotTeekaTranslation') ?? false;
- _language = Languages.values[prefs.getInt('language') ?? 0];
- print('$_language');
- _initialized = true;
- resetLinesPerPage();
- isBookmarked();
- if (widget.searchView) {
- //
- // searchedAng = _pageNo as DBResult;
- // widget.searchedBaaniLine!.sourcePage!;
- //
- }
- });
- // updateGurbaniLists(); //kro
- // setState(() {
- // });
- }
- @override
- void dispose() {
- WakelockPlus.disable();
- super.dispose();
- }
- semiUpdate() {
- if (calculatedPages.length == 1) {
- setState(() {});
- }
- }
- resetLinesPerPage() {
- if (widget.searchView) {
- getSearchedAng();
- return;
- }
- int linesToShow = 0;
- if (_language == Languages.Both) {
- linesToShow = 2;
- } else {
- linesToShow = 1;
- }
- if (_bookNo == 1) {
- if (_showEnglishTransliteration) {
- linesToShow += 1;
- }
- if (_showEnglishTranslation) {
- linesToShow += 1;
- }
- if (_showPunjabiTranslation) {
- linesToShow += 1;
- }
- if (_showPunjabiTeekaTranslation) {
- linesToShow += 1;
- }
- if (_showHindiTranslation) {
- linesToShow += 1;
- }
- if (_showHindiTeekaTranslation) {
- linesToShow += 1;
- }
- if (_showFaridkotTeekaTranslation) {
- linesToShow += 1;
- }
- } else {
- if (_showEnglishTransliteration) {
- linesToShow += 1;
- }
- if (_showEnglishTranslation) {
- linesToShow += 1;
- }
- }
- _linesPerPage = (10 - linesToShow);
- // _linesPerPage = _language == Languages.Both && _showEnglishTransliteration ? 6 : _language == Languages.Both && !_showEnglishTransliteration ? 7 : _showEnglishTransliteration ? 7 : 10;
- if (_isNitnem) {
- updateNitnemLists();
- } else {
- updateGurbaniLists();
- }
- }
- // double _lineHeight({required Text textWidget}) {
- // final textPainter = TextPainter(
- // text: textWidget.text!.textSpan,
- // textDirection: TextDirection.ltr,
- // maxLines: 999, // A large number to ensure we get an accurate estimate
- // );
- //
- // textPainter.layout(maxWidth: widget.maxWidth);
- // textPainter.computeLineMetrics().length;
- // setState(() {
- // });
- // }
- goToSourcePage(int sourcePageNo) {
- _sourcePageNo = sourcePageNo;
- _pageNo = 1;
- _previousChapterTotalPages.clear();
- updateGurbaniLists();
- }
- scrollToPosition() {
- var p = _itemPositionListener.itemPositions.value;
- // print("======================================================");
- // print(p.first.index);
- // print(p.last.index);
- WidgetsBinding.instance.addPostFrameCallback((_) async {
- await Future.delayed(const Duration(milliseconds: 100));
- _itemScrollController.scrollTo(
- index: p.last.index, duration: const Duration(milliseconds: 100));
- });
- // _itemScrollController.scrollTo(index: p.first.index, duration: const Duration(milliseconds: 100));
- }
- @override
- Widget build(BuildContext context) {
- print(_bookNo);
- final Size mqSize = MediaQuery.of(context).size;
- // print(size.height);
- print(widget.bookNo);
- print("=================================");
- // print(calculatedPages.first.textSpans.elementAt(2));
- // print(searchedAng.baaniLines.first.sp);
- print(widget.searchedBaaniLine?.sourcePage);
- return SafeArea(
- child: Scaffold(
- backgroundColor: nightmodevalue ? whiteColor : blackColor,
- drawer: Drawer(
- width: mqSize.width * 0.8,
- child: ListView(
- children: _isNitnem
- ? [
- const SizedBox(height: 15),
- const Row(
- children: [
- // Logo
- Padding(
- padding: EdgeInsets.only(left: 18.0),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 26, // specify size if needed
- ),
- ),
- // Data Sources text
- Padding(
- padding:
- EdgeInsets.only(left: 8.0, top: 5, bottom: 5),
- child: Text(
- 'Data Sources: Sundar Gutka',
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- ),
- ),
- ],
- ),
- const SizedBox(height: 10),
- Row(
- children: [
- const Padding(
- padding: EdgeInsets.only(left: 18.0),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 26, // specify size if needed
- ),
- ),
- const SizedBox(width: 10),
- Text(
- 'Baani: ${_title}',
- style: const TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- ),
- ],
- ),
- const SizedBox(height: 15),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 20),
- const Padding(
- padding: EdgeInsets.only(left: 18.0, top: 10),
- child: Text(
- 'Translations : -',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- // const SizedBox(height: 15),
- const SizedBox(height: 10),
- ListTile(
- title: const Text('English Transliteration',
- style: TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18)),
- trailing: Switch(
- value: _showEnglishTransliteration,
- onChanged: (value) {
- _showEnglishTransliteration = value;
- prefs.setBool('showEnglishTransliteration', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- ),
- ),
- if (!Contexts.nitnemEngTranslationExceptions
- .contains(_nitnemId))
- ListTile(
- title: const Text('English Translation',
- style: TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18)),
- trailing: Switch(
- value: _showEnglishTranslation,
- onChanged: (value) {
- _showEnglishTranslation = value;
- prefs.setBool('showEnglishTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- ),
- ),
- if (!Contexts.nitnemPunTranslationExceptions
- .contains(_nitnemId))
- ListTile(
- title: const Text('Punjabi Translation',
- style: TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18)),
- trailing: Switch(
- value: _showPunjabiTranslation,
- onChanged: (value) {
- _showPunjabiTranslation = value;
- prefs.setBool('showPunjabiTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- ),
- ),
- if (!Contexts.nitnemPTTranslationExceptions
- .contains(_nitnemId))
- ListTile(
- title: const Text('Punjabi Teeka',
- style: TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18)),
- trailing: Switch(
- value: _showPunjabiTeekaTranslation,
- onChanged: (value) {
- _showPunjabiTeekaTranslation = value;
- prefs.setBool('showPunjabiTeekaTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- ),
- ),
- if (!Contexts.nitnemFTTranslationExceptions
- .contains(_nitnemId))
- ListTile(
- title: const Text('Faridkot Teeka',
- style: TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18)),
- trailing: Switch(
- value: _showFaridkotTeekaTranslation,
- onChanged: (value) {
- _showFaridkotTeekaTranslation = value;
- prefs.setBool(
- 'showFaridkotTeekaTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- ),
- ),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 15),
- const Padding(
- padding:
- EdgeInsets.only(left: 18.0, top: 10.0, bottom: 3.0),
- child: Text(
- 'Select Baani Language :',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- const SizedBox(height: 10),
- ListTile(
- title: const Text(
- 'Language ',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: DropdownButton<Languages>(
- value: _language,
- onChanged: (Languages? newValue) {
- _language = newValue!;
- prefs.setInt('language', newValue.index);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- items: Languages.values
- .map<DropdownMenuItem<Languages>>(
- (Languages value) {
- return DropdownMenuItem<Languages>(
- value: value,
- child: Text(
- value.toString().split('.').last,
- style: const TextStyle(
- fontWeight: FontWeight.bold, fontSize: 18),
- ),
- );
- }).toList(),
- ),
- ),
- ]
- : _bookNo == 1
- ? [
- const SizedBox(height: 20),
- const Row(
- children: [
- // Logo
- Padding(
- padding: EdgeInsets.only(left: 18.0),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 24, // specify size if needed
- ),
- ),
- // Data Sources text
- Padding(
- padding: EdgeInsets.only(
- left: 10.0, top: 5, bottom: 5),
- child: Text(
- 'Source: Guru Granth Sahib Ji',
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- ),
- ),
- ],
- ),
- Row(
- children: [
- // Logo
- const Padding(
- padding: EdgeInsets.only(left: 18.0),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 24, // specify size if needed
- ),
- ),
- // Data Sources text
- Padding(
- padding: const EdgeInsets.only(
- left: 10.0, top: 5, bottom: 5),
- child: Text(
- 'Ang - : $_sourcePageNo',
- style: const TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- )),
- ],
- ),
- const SizedBox(height: 10),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 10),
- const Padding(
- padding: EdgeInsets.only(left: 18.0, top: 10),
- child: Text(
- 'Translations :',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- const SizedBox(height: 15),
- ListTile(
- title: const Text(
- 'English Transliteration',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showEnglishTransliteration,
- onChanged: (value) {
- _showEnglishTransliteration = value;
- prefs.setBool(
- 'showEnglishTransliteration', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'English Translation',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showEnglishTranslation,
- onChanged: (value) {
- _showEnglishTranslation = value;
- prefs.setBool('showEnglishTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'Punjabi Translation',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showPunjabiTranslation,
- onChanged: (value) {
- _showPunjabiTranslation = value;
- prefs.setBool('showPunjabiTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'Punjabi Teeka',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showPunjabiTeekaTranslation,
- onChanged: (value) {
- _showPunjabiTeekaTranslation = value;
- prefs.setBool(
- 'showPunjabiTeekaTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'Faridkot Teeka',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showFaridkotTeekaTranslation,
- onChanged: (value) {
- _showFaridkotTeekaTranslation = value;
- prefs.setBool(
- 'showFaridkotTeekaTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- // ListTile(
- // title: const Text('Hindi Translation'),
- // trailing: Switch(
- // value: _showHindiTranslation,
- // onChanged: (value) {
- // _showHindiTranslation = value;
- // resetLinesPerPage();
- // },
- // ),
- // ),
- // ListTile(
- // title: const Text('Hindi Teeka'),
- // trailing: Switch(
- // value: _showHindiTeekaTranslation,
- // onChanged: (value) {
- // _showHindiTeekaTranslation = value;
- // resetLinesPerPage();
- // },
- // ),
- // ),
- const SizedBox(height: 10),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 15),
- const Padding(
- padding: EdgeInsets.only(
- left: 18.0, top: 10.0, bottom: 3.0),
- child: Text(
- 'Select Baani Language :',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- const SizedBox(height: 10),
- ListTile(
- title: const Text(
- 'Language',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: DropdownButton<Languages>(
- value: _language,
- onChanged: (Languages? newValue) {
- _language = newValue!;
- prefs.setInt('language', newValue.index);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- },
- items: Languages.values
- .map<DropdownMenuItem<Languages>>(
- (Languages value) {
- return DropdownMenuItem<Languages>(
- value: value,
- child: Text(value.toString().split('.').last,
- style: const TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 18)),
- );
- }).toList(),
- ),
- ),
- ]
- : [
- const SizedBox(height: 20),
- const Row(
- children: [
- // Logo
- Padding(
- padding: EdgeInsets.only(left: 10.0),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 26, // specify size if needed
- ),
- ),
- // Data Sources text
- Padding(
- padding:
- EdgeInsets.only(left: 8.0, top: 5, bottom: 5),
- child: Text(
- 'Source: Dasam Granth Sahib',
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- ),
- ),
- ],
- ),
- Row(
- children: [
- // Logo
- const Padding(
- padding: EdgeInsets.only(
- left: 10.0,
- ),
- child: Icon(
- Icons.info,
- color: Colors.red, // specify color if needed
- size: 24, // specify size if needed
- ),
- ),
- // Data Sources text
- Padding(
- padding: const EdgeInsets.only(
- left: 10.0, top: 10, bottom: 5),
- child: Text(
- 'Ang: $_sourcePageNo',
- style: const TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold),
- ),
- ),
- //
- ],
- ),
- const SizedBox(height: 10),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 20),
- const Padding(
- padding: EdgeInsets.only(left: 18.0, top: 10),
- child: Text(
- 'Translations : -',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- const SizedBox(height: 10),
- ListTile(
- title: const Text(
- 'English Transliteration',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showEnglishTransliteration,
- onChanged: (value) {
- _showEnglishTransliteration = value;
- prefs.setBool(
- 'showEnglishTransliteration', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'English Translation',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showEnglishTranslation,
- onChanged: (value) {
- _showEnglishTranslation = value;
- prefs.setBool('showEnglishTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- ListTile(
- title: const Text(
- 'Punjabi Translation',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: Switch(
- value: _showPunjabiTranslation,
- onChanged: (value) {
- _showPunjabiTranslation = value;
- prefs.setBool('showPunjabiTranslation', value);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- if (widget.searchView) {
- scrollToPosition();
- }
- },
- ),
- ),
- const SizedBox(height: 10),
- const Divider(
- height: 1,
- color: blackColor,
- ),
- const SizedBox(height: 10),
- const Padding(
- padding: EdgeInsets.only(
- left: 18.0, top: 10.0, bottom: 3.0),
- child: Text(
- 'Select Baani Language :',
- style: TextStyle(
- color: blackColor,
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- const SizedBox(height: 10),
- ListTile(
- title: const Text(
- 'Language',
- style: TextStyle(
- color: blackColor,
- fontSize: 19,
- fontWeight: FontWeight.bold,
- ),
- ),
- trailing: DropdownButton<Languages>(
- value: _language,
- onChanged: (Languages? newValue) {
- _language = newValue!;
- prefs.setInt('language', newValue.index);
- _pageNo = 1;
- _loadedLines = 0;
- calculatedPages.clear();
- resetLinesPerPage();
- // if(!value) {
- // scrollToPosition();
- // }
- },
- items: Languages.values
- .map<DropdownMenuItem<Languages>>(
- (Languages value) {
- return DropdownMenuItem<Languages>(
- value: value,
- child: Text(value.toString().split('.').last,
- style: const TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 18)),
- );
- }).toList(),
- ),
- ),
- ],
- ),
- ),
- appBar: AppBar(
- title: Text(widget.title ?? 'Gurbani'),
- actions: [
- if (!widget.searchView && !_isNitnem)
- IconButton(
- icon: const Icon(Icons.search),
- onPressed: () {
- _showSearch = !_showSearch;
- setState(() {});
- },
- ),
- widget.searchView && widget.searchedBaaniLine != null
- ? IconButton(
- icon: Icon(
- _isBookMarked ? Icons.favorite : Icons.favorite_outline,
- color: whiteColor,
- ),
- onPressed: () async {
- await saveToBookmarks(widget.searchedBaaniLine!);
- setState(() {
- // _isBookMarked = !_isBookMarked;
- });
- },
- )
- : Container(),
- IconButton(
- icon: const Icon(
- Icons.build,
- color: whiteColor,
- ),
- onPressed: () {
- Helper.toScreen(context, const Settings());
- },
- ),
- ],
- ),
- body: widget.searchView
- ? BaaniPageView(
- baaniLines: searchedAng,
- linesPerPage: searchedAng.count,
- language: _language,
- showEnglishTransliteration: _showEnglishTransliteration,
- showEnglishTranslation: _showEnglishTranslation,
- showPunjabiTranslation: _showPunjabiTranslation,
- showPunjabiTeekaTranslation: _showPunjabiTeekaTranslation,
- showFaridkotTeekaTranslation: _showFaridkotTeekaTranslation,
- showHindiTranslation: _showHindiTranslation,
- showHindiTeekaTranslation: _showHindiTeekaTranslation,
- // language: _language,
- isLoading: _isLoading,
- searchedLine: widget.searchedBaaniLine,
- showPageNo: false,
- itemPositionListener: _itemPositionListener,
- itemScrollController: _itemScrollController, isbold: isbold,
- nightmodevalue: nightmodevalue,
- )
- : Stack(
- children: [
- Container(
- color: nightmodevalue ? whiteColor : blackColor,
- height: Contexts.size!.height -
- _getAppbarAndStatusBarHeight() +
- _extraBottomPadding,
- width: Contexts.size!.width,
- child: Center(
- child: CalculatedViewWidget(
- baaniLines: calculatedPages.isEmpty ||
- calculatedPages.length <= 1 ||
- calculatedPages.length <= _pageNo
- ? CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: 0,
- totalPages: 0)
- : calculatedPages.elementAt(_pageNo),
- isLoading: _isLoading,
- ),
- ),
- ),
- SizedBox(
- width: Contexts.size!.width,
- height: Contexts.size!.height -
- _getAppbarAndStatusBarHeight() +
- _extraBottomPadding,
- child: GestureDetector(
- child: FlipWidget(
- key: _flipKey,
- textureSize: Size(
- Contexts.size!.width,
- Contexts.size!.height -
- _getAppbarAndStatusBarHeight() +
- _extraBottomPadding) *
- 1,
- // leftToRight: true, //
- child: Container(
- color: nightmodevalue ? whiteColor : blackColor,
- child: Center(
- child: CalculatedViewWidget(
- baaniLines: calculatedPages.isEmpty
- ? CalculatedItems(
- textSpans: List.empty(growable: true),
- pageNo: 0,
- totalPages: 0)
- : calculatedPages.elementAt(
- (_pageNo < 1 ? 1 : _pageNo) - 1),
- isLoading: _isLoading,
- ),
- ),
- ),
- ),
- onHorizontalDragStart: (details) {
- _oldPosition = details.globalPosition;
- _flipKey.currentState?.startFlip();
- },
- onHorizontalDragUpdate: (details) {
- Offset off = details.globalPosition - _oldPosition;
- double tilt = 1 / _clampMin((-off.dy + 20) / 100);
- double percent =
- math.max(0, -off.dx / Contexts.size!.width * 1.4);
- percent = percent - percent / 2 * (1 - 1 / tilt);
- _flipKey.currentState?.flip(percent, tilt);
- if (details.primaryDelta! > 0) {
- isLeftToRight = true;
- } else if (details.primaryDelta! < 0) {
- isLeftToRight = false;
- } else {
- isLeftToRight = null;
- }
- _isDragging = true;
- },
- onHorizontalDragEnd: (details) {
- if (!_isDragging) {
- return;
- }
- _isDragging = false;
- _flipKey.currentState?.stopFlip();
- if (isLeftToRight == true) {
- if (_sourcePageNo == 1 && _pageNo == 1) {
- return;
- } else if (_sourcePageNo >= 1 && _pageNo == 1) {
- _sourcePageNo -= 1;
- if (_sourcePageNo < 1) {
- _sourcePageNo = 1;
- }
- _pageNo = _previousChapterTotalPages.isEmpty
- ? 0
- : _previousChapterTotalPages.last;
- if (_previousChapterTotalPages.isNotEmpty) {
- _previousChapterTotalPages.removeLast();
- }
- // print(_history.length);
- if (_history.length > 0) {
- calculatedPages.clear();
- calculatedPages
- .addAll(_history.last.calculatedItems);
- currentAng = _history.last.lines;
- _loadedLines = _history.last.loadedLines;
- _pageNo = _history.last.pageNo;
- _sourcePageNo = _history.last.sourcePageNo;
- _history.last.unlink();
- }
- } else if (_sourcePageNo >= 1 && _pageNo >= 1) {
- _pageNo -= 1;
- // print(_pageNo);
- }
- } else if (isLeftToRight == false) {
- _pageNo += 1;
- }
- if (isLeftToRight != null) {
- if (_isNitnem) {
- // if(currentAng.baaniLines.length - (_linesPerPage * (_pageNo)) <0){
- // _pageNo = (currentAng.baaniLines.length/_linesPerPage).ceil();
- // // return;
- // }
- if (_pageNo > calculatedPages.length) {
- _pageNo = calculatedPages.length;
- return;
- }
- updateNitnemLists();
- } else {
- if (_loadSourceLines) {
- if (_loadedLines >= currentAng.count) {
- if (calculatedPages.length - (_pageNo) < 0) {
- HistoryItem history = HistoryItem(
- calculatedItems: calculatedPages.toList(),
- lines: currentAng,
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo - 1,
- loadedLines: _loadedLines);
- _history.add(history);
- _pageNo = 1;
- _sourcePageNo += 1;
- calculatedPages.clear();
- _loadedLines = 0;
- // return;
- } else {
- // return;
- }
- }
- // if((currentAng.baaniLines.length - (_linesPerPage * (_pageNo)) <0) && (currentAng.baaniLines.length - (_linesPerPage * (_pageNo-1)) <=0)){
- // _pageNo = 1;
- // _sourcePageNo += 1;
- // // return;
- // }
- // updateGurbaniLists();
- // return;
- }
- updateGurbaniLists(); //kro
- }
- setState(() {});
- }
- // Navigator.push(
- // context,
- // MaterialPageRoute(
- // builder: (context) => HomeScreen(
- // offset: widget.offset + 10,
- // )));
- },
- onHorizontalDragCancel: () {
- _flipKey.currentState?.stopFlip();
- },
- ),
- ),
- // Positioned(
- // bottom: 10,
- // right: 10,
- // child: Column(
- // children: [
- // IconButton(
- // onPressed: () => Navigator.push(
- // context,
- // MaterialPageRoute(
- // builder: (context) => HomeScreen(
- // offset: widget.offset - 10,
- // ))),
- // icon: const Icon(
- // Icons.arrow_back,
- // color: Colors.white,
- // )),
- // IconButton(
- // onPressed: () => Navigator.push(
- // context,
- // MaterialPageRoute(
- // builder: (context) => HomeScreen(
- // offset: widget.offset + 10,
- // ))),
- // icon: const Icon(Icons.arrow_forward,
- // color: Colors.white)),
- // ],
- // ))
- ],
- ),
- floatingActionButton: _showSearch
- ? Container(
- margin: EdgeInsets.only(top: 60.h, left: 10.w, right: 10.w),
- color: Colors.white.withOpacity(.9),
- child: TextField(
- controller: _searchController,
- textInputAction: TextInputAction.search,
- keyboardType: TextInputType.number,
- inputFormatters: [
- FilteringTextInputFormatter.allow(RegExp(r'^[0-9]+$')),
- ],
- onSubmitted: (value) {
- int inputPageNo = int.parse(value);
- if ((_bookNo == 1 &&
- (inputPageNo < 1 ||
- inputPageNo > maxvalueofBook1)) ||
- (_bookNo == 2 &&
- (inputPageNo < 1 ||
- inputPageNo > maxvalueofBook2))) {
- if (_bookNo == 1) {
- errorMessage =
- "Please enter a page number between 1 and $maxvalueofBook1.";
- } else if (_bookNo == 2) {
- errorMessage =
- "Please enter an ang number between 1 and $maxvalueofBook2.";
- }
- showDialog(
- context: context,
- builder: (context) {
- return AlertDialog(
- title: const Text(
- "Invalid Input",
- style: TextStyle(
- color: Colors.black,
- fontWeight: FontWeight.bold),
- ),
- content: Text(
- errorMessage,
- style: const TextStyle(
- color: Colors.black,
- fontWeight: FontWeight.bold),
- ),
- actions: <Widget>[
- TextButton(
- onPressed: () {
- Navigator.of(context).pop();
- _searchController.clear();
- },
- child: const Text("OK"),
- ),
- ],
- );
- },
- );
- } else {
- HistoryItem history = HistoryItem(
- calculatedItems: calculatedPages.toList(),
- lines: currentAng,
- sourcePageNo: _sourcePageNo,
- pageNo: _pageNo,
- loadedLines: _loadedLines);
- _history.add(history);
- calculatedPages.clear();
- _loadedLines = 0;
- _sourcePageNo = int.parse(value);
- _pageNo = 1;
- updateGurbaniLists();
- setState(() {
- _showSearch = false;
- _searchController.clear();
- });
- }
- },
- decoration: InputDecoration(
- hintText: 'Search',
- hintStyle: const TextStyle(
- color: Colors.black, fontWeight: FontWeight.bold),
- prefixIcon: const Icon(
- Icons.search,
- color: Colors.black,
- ),
- suffixIcon: IconButton(
- icon: const Icon(
- Icons.close,
- color: Colors.black,
- ),
- onPressed: () {
- _searchController.clear();
- setState(() {
- _showSearch = false;
- });
- },
- ),
- border: OutlineInputBorder(
- borderRadius: BorderRadius.circular(10.r),
- borderSide: BorderSide(
- width: 1.r,
- style: BorderStyle.solid,
- ),
- ),
- filled: true,
- contentPadding: EdgeInsets.all(16.r),
- fillColor: Colors.white.withOpacity(0.1),
- ),
- style: const TextStyle(
- color: blackColor, fontWeight: FontWeight.bold),
- ))
- : null,
- floatingActionButtonLocation: FloatingActionButtonLocation.centerTop,
- ),
- );
- }
- }
- class BaaniSearchDelegate extends SearchDelegate<BaaniLineModel> {
- @override
- List<Widget> buildActions(BuildContext context) {
- return [
- IconButton(
- icon: const Icon(Icons.clear),
- onPressed: () {
- query = '';
- },
- ),
- ];
- }
- @override
- Widget buildLeading(BuildContext context) {
- return IconButton(
- icon: const Icon(Icons.arrow_back),
- onPressed: () => Navigator.of(context).pop(),
- );
- }
- @override
- Widget buildResults(BuildContext context) {
- return Container(
- child: const Center(
- child: Text('Search Results'),
- ),
- );
- }
- @override
- Widget buildSuggestions(BuildContext context) {
- return Container(
- child: const Center(
- child: Text('Enter Page no to show'),
- ),
- );
- }
- }
- /*
- BaaniPageView(
- baaniLines: _loadSourceLines || _isNitnem ?
- currentAng.baaniLines.length ~/ (_linesPerPage*(_pageNo)) ==0 ?
- DBResult(baaniLines: List.empty(), count: 0) :
- currentAng.baaniLines.length < _pageNo*_linesPerPage ?
- DBResult(baaniLines: List.empty(), count: 0) :
- DBResult(
- baaniLines: currentAng.baaniLines.sublist(
- _pageNo*_linesPerPage ,
- (_pageNo+1)*_linesPerPage >= currentAng.baaniLines.length ?
- currentAng.baaniLines.length :
- (_pageNo+1)*_linesPerPage),
- count: _linesPerPage) :
- nextAng,
- pageNo: (currentAng.count/_linesPerPage).ceil() == _pageNo ? 1 : _pageNo+1,
- totalPages: _loadSourceLines || _isNitnem ? (currentAng.count/_linesPerPage).ceil() : (nextAng.count/_linesPerPage).ceil(),
- linesPerPage: _linesPerPage,
- showEnglishTransliteration: _showEnglishTransliteration,
- showEnglishTranslation: _showEnglishTranslation,
- showPunjabiTranslation: _bookNo == 1 ? _showPunjabiTranslation : false,
- showPunjabiTeekaTranslation: _showPunjabiTeekaTranslation,
- showFaridkotTeekaTranslation: _showFaridkotTeekaTranslation,
- showHindiTranslation: _showHindiTranslation,
- showHindiTeekaTranslation: _showHindiTeekaTranslation,
- language: _language,
- isLoading: _isLoading,
- showAng: _isNitnem ? false : true,
- ),
- ========================================================
- BaaniPageView(
- baaniLines: _loadSourceLines || _isNitnem ?
- currentAng.baaniLines.length < _pageNo*_linesPerPage ?
- _pageNo >1 ?
- DBResult(
- baaniLines: currentAng.baaniLines.sublist(
- (_pageNo-1)*_linesPerPage,
- (_pageNo)*_linesPerPage >= currentAng.baaniLines.length ?
- currentAng.baaniLines.length :
- _pageNo*_linesPerPage
- ),
- count: _linesPerPage
- ) :
- DBResult(baaniLines: List.empty(), count: 0) :
- DBResult(
- baaniLines: currentAng.baaniLines.sublist(
- (_pageNo-1)*_linesPerPage,
- (_pageNo)*_linesPerPage >= currentAng.baaniLines.length ?
- currentAng.baaniLines.length :
- _pageNo*_linesPerPage
- ),
- count: _linesPerPage
- ) : currentAng,
- pageNo: _pageNo,
- totalPages: (currentAng.count/_linesPerPage).ceil(),
- linesPerPage: _linesPerPage,
- showEnglishTransliteration: _showEnglishTransliteration,
- showEnglishTranslation: _showEnglishTranslation,
- showPunjabiTranslation: _bookNo == 1 ? _showPunjabiTranslation : false,
- showPunjabiTeekaTranslation: _showPunjabiTeekaTranslation,
- showFaridkotTeekaTranslation: _showFaridkotTeekaTranslation,
- showHindiTranslation: _showHindiTranslation,
- showHindiTeekaTranslation: _showHindiTeekaTranslation,
- language: _language,
- isLoading: _isLoading,
- showAng: _isNitnem ? false : true,
- ),
- */
[text] sds
Viewer
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
Editor
You can edit this paste and save as new: