quran screen improvements.

development
Sikander Saleem 5 years ago
parent 5e4f4435d8
commit 834a05e58a

@ -0,0 +1,13 @@
import 'package:tangheem/models/surah_model.dart';
class SurahAppState {
static final SurahAppState _instance = SurahAppState._internal();
SurahAppState._internal();
factory SurahAppState() => _instance;
SurahModel _surahModel;
SurahModel get getSurahModel => _surahModel;
void setSurahModel(SurahModel _surahModel) {
this._surahModel = _surahModel;
}
}

@ -4,6 +4,7 @@ import 'package:flutter/painting.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart'; import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/app_state/surah_app_state.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/surah_model.dart'; import 'package:tangheem/models/surah_model.dart';
@ -47,6 +48,7 @@ class _HomeScreenState extends State<HomeScreen> {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
_surahModel = await TangheemUserApiClient().getSurahs(); _surahModel = await TangheemUserApiClient().getSurahs();
SurahAppState().setSurahModel(_surahModel);
_tangheemType = await TangheemUserApiClient().getTangheemType(); _tangheemType = await TangheemUserApiClient().getTangheemType();
_surahList = _surahModel.data.map((element) => element.nameAR).toList(); _surahList = _surahModel.data.map((element) => element.nameAR).toList();
_tangheemList = _tangheemType?.data?.where((element) => element.isActive)?.toList()?.map((element) => element.tangheemTypeName)?.toList() ?? []; _tangheemList = _tangheemType?.data?.where((element) => element.isActive)?.toList()?.map((element) => element.tangheemTypeName)?.toList() ?? [];

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart'; import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/app_state/surah_app_state.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/aya_model.dart'; import 'package:tangheem/models/aya_model.dart';
@ -18,10 +19,9 @@ import 'tangheem_detail_screen.dart';
class QuranScreen extends StatefulWidget { class QuranScreen extends StatefulWidget {
static const String routeName = "/surah"; static const String routeName = "/surah";
final SurahModel surahModel;
final String query; final String query;
QuranScreen({Key key, this.surahModel, @required this.query}) : super(key: key); QuranScreen({Key key, @required this.query}) : super(key: key);
@override @override
_QuranScreenState createState() { _QuranScreenState createState() {
@ -37,7 +37,7 @@ class _QuranScreenState extends State<QuranScreen> {
int _currentSurahIndex = -1; int _currentSurahIndex = -1;
int _currentPage = 0; int _currentPage = 0;
int _ayaInPage = 5;
List<String> _surahList = []; List<String> _surahList = [];
List<int> _fromAyaList = []; List<int> _fromAyaList = [];
List<int> _toAyaList = []; List<int> _toAyaList = [];
@ -56,19 +56,20 @@ class _QuranScreenState extends State<QuranScreen> {
} }
void getSurah() async { void getSurah() async {
Utils.showLoading(context);
try { try {
if (widget.surahModel == null) { if (SurahAppState().getSurahModel == null) {
Utils.showLoading(context);
_surahModel = await TangheemUserApiClient().getSurahs(); _surahModel = await TangheemUserApiClient().getSurahs();
SurahAppState().setSurahModel(_surahModel);
} else { } else {
_surahModel = widget.surahModel; _surahModel = SurahAppState().getSurahModel;
} }
_surahList = _surahModel.data.map((element) => element.nameAR).toList(); _surahList = _surahModel.data.map((element) => element.nameAR).toList();
_currentPage = 1;
Utils.hideLoading(context);
//filterData(); //filterData();
} catch (ex, tr) { } catch (ex, tr) {
Utils.handleException(ex, null); Utils.handleException(ex, null);
} finally {
Utils.hideLoading(context); Utils.hideLoading(context);
} }
setState(() {}); setState(() {});
@ -119,11 +120,11 @@ class _QuranScreenState extends State<QuranScreen> {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
// _currentPage = 603; // _currentPage = 603;
_ayaModel = await TangheemUserApiClient().getQuranByPageNo(_currentPage + 1); _ayaModel = await TangheemUserApiClient().getQuranByPageNo(_currentPage);
Utils.hideLoading(context);
setState(() {}); setState(() {});
} catch (ex, tr) { } catch (ex, tr) {
Utils.handleException(ex, null); Utils.handleException(ex, null);
} finally {
Utils.hideLoading(context); Utils.hideLoading(context);
} }
scrollToId.animateTo("$_currentPage", duration: Duration(milliseconds: 300), curve: Curves.ease); scrollToId.animateTo("$_currentPage", duration: Duration(milliseconds: 300), curve: Curves.ease);
@ -161,21 +162,26 @@ class _QuranScreenState extends State<QuranScreen> {
} }
} }
void _clearFilterAndRefreshData() {
_selectedSurah = -1;
_selectedFromAya = -1;
_selectedToAya = -1;
getQuranByPageNo();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var tempList = _ayaModel?.data?.map((e) => e.surahNameEN)?.toList()?.toSet()?.toList() ?? []; var tempList = _ayaModel?.data?.map((e) => e.surahNameAR)?.toList()?.toSet()?.toList() ?? [];
String _surahName = ""; String _surahName = "";
_surahName = tempList.isEmpty ? "" : tempList?.last ?? ""; _surahName = tempList.isEmpty ? "" : tempList?.last ?? "";
int index = _surahList.indexWhere((element) => element == _surahName); int index = _surahList.indexWhere((element) => element == _surahName);
if (index != null) { if (index != null) {
_currentSurahIndex = index; _currentSurahIndex = index;
} }
String _surahAya = ""; String _surahAya = "";
_ayaModel?.data?.forEach((element) { _ayaModel?.data?.forEach((element) {
var temp = element.numberInSurah == 1 ? getBismillahWithSurahName(element.surahNameEN, element.surahID != 1, _surahAya.length <= 1) + element.ayahText : element.ayahText; var temp = element.numberInSurah == 1 ? getBismillahWithSurahName(element.surahNameAR, element.surahID != 1, _surahAya.length <= 1) + element.ayahText : element.ayahText;
_surahAya = _surahAya + temp; _surahAya = _surahAya + temp;
}); });
@ -208,10 +214,6 @@ class _QuranScreenState extends State<QuranScreen> {
if (_selectedFromAya != index) { if (_selectedFromAya != index) {
_selectedFromAya = index; _selectedFromAya = index;
setState(() {}); setState(() {});
/// _selectedToAya = index;
// _currentPage = index;
// getAyaByRange();
} }
}), }),
), ),
@ -221,8 +223,6 @@ class _QuranScreenState extends State<QuranScreen> {
if (_selectedToAya != index) { if (_selectedToAya != index) {
_selectedToAya = index; _selectedToAya = index;
setState(() {}); setState(() {});
// _currentPage = index;
// getAyaByRange();
} }
}), }),
), ),
@ -253,10 +253,7 @@ class _QuranScreenState extends State<QuranScreen> {
(_selectedSurah == -1 || _selectedFromAya == -1 || _selectedToAya == -1) (_selectedSurah == -1 || _selectedFromAya == -1 || _selectedToAya == -1)
? null ? null
: () { : () {
_selectedSurah = -1; _clearFilterAndRefreshData();
_selectedFromAya = -1;
_selectedToAya = -1;
getQuranByPageNo();
}), }),
], ],
), ),
@ -280,18 +277,18 @@ class _QuranScreenState extends State<QuranScreen> {
_currentSurahIndex <= 0 ? "" : getNotNullValue(_surahList, _currentSurahIndex - 1), _currentSurahIndex <= 0 ? "" : getNotNullValue(_surahList, _currentSurahIndex - 1),
_currentSurahIndex <= 0 _currentSurahIndex <= 0
? null ? null
: () { : (value) {
// _selectedSurah = _selectedSurah - 1; _currentPage = _surahModel?.data?.elementAt(_surahList.indexOf(value))?.startPageNo ?? _currentPage;
// filterData(); _clearFilterAndRefreshData();
}), }),
previousOptionButton( previousOptionButton(
"assets/icons/next.svg", "assets/icons/next.svg",
_currentSurahIndex >= (_surahList.isNotEmpty ? (_surahList.length - 1) : 0) ? "" : getNotNullValue(_surahList, _currentSurahIndex + 1), _currentSurahIndex >= (_surahList.isNotEmpty ? (_surahList.length - 1) : 0) ? "" : getNotNullValue(_surahList, _currentSurahIndex + 1),
_currentSurahIndex >= (_surahList.isNotEmpty ? (_surahList.length - 1) : 0) _currentSurahIndex >= (_surahList.isNotEmpty ? (_surahList.length - 1) : 0)
? null ? null
: () { : (value) {
// _selectedSurah = _selectedSurah + 1; _currentPage = _surahModel?.data?.singleWhere((element) => element.nameAR == value)?.startPageNo ?? _currentPage;
// filterData(); _clearFilterAndRefreshData();
}), }),
], ],
), ),
@ -372,27 +369,21 @@ class _QuranScreenState extends State<QuranScreen> {
children: [ children: [
nextOptionButton( nextOptionButton(
"assets/icons/prev_single.svg", "assets/icons/prev_single.svg",
"الآيات السابقة", "الصفحة السابقة",
_currentPage == 0 _currentPage <= 1
? null ? null
: () { : (value) {
_currentPage = _currentPage - 1; _currentPage = _currentPage - 1;
_selectedSurah = -1; _clearFilterAndRefreshData();
_selectedFromAya = -1;
_selectedToAya = -1;
getQuranByPageNo();
}), }),
previousOptionButton( previousOptionButton(
"assets/icons/next_single.svg", "assets/icons/next_single.svg",
"الآيات التالية", "الصفحة التالية",
_currentPage == 604 _currentPage == 604
? null ? null
: () { : (value) {
_currentPage = _currentPage + 1; _currentPage = _currentPage + 1;
_selectedSurah = -1; _clearFilterAndRefreshData();
_selectedFromAya = -1;
_selectedToAya = -1;
getQuranByPageNo();
}), }),
], ],
), ),
@ -436,9 +427,9 @@ class _QuranScreenState extends State<QuranScreen> {
); );
} }
Widget nextOptionButton(String icon, String text, VoidCallback onPressed) { Widget nextOptionButton(String icon, String text, Function(String) onPressed) {
return InkWell( return InkWell(
onTap: onPressed, onTap: () => onPressed(text),
child: onPressed == null child: onPressed == null
? SizedBox() ? SizedBox()
: Row( : Row(
@ -486,9 +477,9 @@ class _QuranScreenState extends State<QuranScreen> {
); );
} }
Widget previousOptionButton(String icon, String text, VoidCallback onPressed) { Widget previousOptionButton(String icon, String text, Function(String) onPressed) {
return InkWell( return InkWell(
onTap: onPressed, onTap: () => onPressed(text),
child: onPressed == null child: onPressed == null
? SizedBox() ? SizedBox()
: Row( : Row(

Loading…
Cancel
Save