Untitled
unknown
plain_text
a year ago
102 kB
4
Indexable
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; int maxvalueofBook3 = 41; int maxvalueofBook4 = 675; int maxvalueofBook5 = 65; int maxvalueofBook6 = 1; int maxvalueofBook7 = 10; int maxvalueofBook8 = 2; 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-", color: Colors.white, style: const TextStyle( fontWeight: FontWeight.bold)); // Set the text color to red 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(); } SizedBox( height: 12.h, ); 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 ? widget.searchedBaaniLine!.orderId > 128313 ? widget.searchedBaaniLine!.orderId > 135898 ? widget.searchedBaaniLine!.orderId > 138659 ? widget.searchedBaaniLine!.orderId > 139465 ? widget.searchedBaaniLine!.orderId > 140486 ? widget.searchedBaaniLine!.orderId > 140817 ? 8 : 7 : 6 : 5 : 4 : 3 : 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; _bookNo = widget.searchedBaaniLine == null ? widget.bookNo : widget.searchedBaaniLine!.orderId > 60555 ? widget.searchedBaaniLine!.orderId > 128313 ? widget.searchedBaaniLine!.orderId > 135898 ? widget.searchedBaaniLine!.orderId > 138659 ? widget.searchedBaaniLine!.orderId > 139465 ? widget.searchedBaaniLine!.orderId > 140486 ? widget.searchedBaaniLine!.orderId > 140817 ? 8 : 7 : 6 : 5 : 4 : 3 : 2 : 1; // _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') ?? false; _showPunjabiTranslation = prefs.getBool('showPunjabiTranslation') ?? false; _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) { final Size mqSize = MediaQuery.of(context).size; print(widget.bookNo); print("================================="); // 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 Expanded( child: Padding( padding: EdgeInsets.only(left: 10.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), Expanded( child: Padding( padding: const EdgeInsets.only( left: 3.0, top: 5, bottom: 5, right: 7), child: 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: 10.0), child: Icon( Icons.info, color: Colors.red, // specify color if needed size: 24, // specify size if needed ), ), // Data Sources text Expanded( child: Padding( padding: EdgeInsets.only( left: 10.0, top: 5, bottom: 5, right: 15), child: Text( 'Source: Guru Granth Sahib Ji', style: TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), ), ), ], ), 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 _searchviewm ? Padding( padding: const EdgeInsets.only( left: 10.0, top: 5, bottom: 5), child: Text( 'Ang - : ${widget.searchedAng}', style: const TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold), )) : 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 :', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), 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', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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 :', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, style: TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold, ), ), ), const SizedBox(height: 10), ListTile( title: const Text( 'Language', overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, 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), Row( children: [ // Logo const 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 Expanded( child: Padding( padding: const EdgeInsets.only( left: 10.0, top: 5, bottom: 5, right: 10), child: Text( 'Source: ${_bookNo == 2 ? "Dasam Granth Sahib JI" : _bookNo == 3 ? "Vaaran Bhai Gurdas Ji" : _bookNo == 4 ? "Kabit Savaiye Bhai Gurdas Ji" : _bookNo == 5 ? "Ghazals Bhai Nand Lal Ji" : _bookNo == 6 ? "Zindagi-Nama Bhai Nand Lal Ji" : _bookNo == 7 ? "Ghazal-Nama Bhai Nand Lal Ji" : _bookNo == 8 ? "Jot Bigas Bhai Nand Lal Ji" : 'Shabad'}', overflow: TextOverflow.ellipsis, maxLines: 3, softWrap: true, 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 _searchviewm ? Padding( padding: const EdgeInsets.only( left: 10.0, top: 5, bottom: 5), child: Text( 'Ang - : ${widget.searchedAng}', style: const TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold), )) : 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: 20), const Padding( padding: EdgeInsets.only(left: 18.0, top: 10), child: Text( 'Translations : -', style: TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), ), const SizedBox(height: 10), ListTile( title: const Text( 'English Transliteration', style: TextStyle( color: blackColor, fontSize: 18, fontWeight: FontWeight.bold, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), 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, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), 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, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), 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, ), overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, ), ), 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( _bookNo == 1 ? "Guru Granth Sahib JI" : _bookNo == 2 ? "Dasam Granth Sahib JI" : _bookNo == 3 ? "Vaaran Bhai Gurdas Ji" : _bookNo == 4 ? "Kabit Savaiye Bhai Gurdas Ji" : _bookNo == 5 ? "Ghazals Bhai Nand Lal Ji" : _bookNo == 6 ? "Zindagi-Nama Bhai Nand Lal Ji" : _bookNo == 7 ? "Ghazal-Nama Bhai Nand Lal Ji" : _bookNo == 8 ? "Jot Bigas Bhai Nand Lal Ji" : 'Shabad', ), 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(), ], ), 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, nightmod: nightmodevalue, boldt: _isbold, ), ), ), 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, boldt: _isbold, nightmod: nightmodevalue, ), ), ), ), 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)) || (_bookNo == 3 && (inputPageNo < 1 || inputPageNo > maxvalueofBook3)) || (_bookNo == 4 && (inputPageNo < 1 || inputPageNo > maxvalueofBook4)) || (_bookNo == 5 && (inputPageNo < 1 || inputPageNo > maxvalueofBook5)) || (_bookNo == 6 && (inputPageNo < 1 || inputPageNo > maxvalueofBook6)) || (_bookNo == 7 && (inputPageNo < 1 || inputPageNo > maxvalueofBook7)) || (_bookNo == 8 && (inputPageNo < 1 || inputPageNo > maxvalueofBook8)) ) { 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."; } else if (_bookNo == 3) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook3."; }else if (_bookNo == 4) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook4."; }else if (_bookNo == 5) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook5."; }else if (_bookNo == 6) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook6."; }else if (_bookNo == 7) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook7."; }else if (_bookNo == 8) { errorMessage = "Please enter an ang number between 1 and $maxvalueofBook8."; } 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, ), */
Editor is loading...
Leave a Comment