navigation list dynamic & members screen added.

development
Sikander Saleem 5 years ago
parent 3935d8ffbc
commit 8d889e502f

@ -6,6 +6,8 @@ import 'package:tangheem/models/aya_tangheem_type_mapped.dart';
import 'package:tangheem/models/country_model.dart'; import 'package:tangheem/models/country_model.dart';
import 'package:tangheem/models/discussion_model.dart'; import 'package:tangheem/models/discussion_model.dart';
import 'package:tangheem/models/general_response_model.dart'; import 'package:tangheem/models/general_response_model.dart';
import 'package:tangheem/models/member_model.dart';
import 'package:tangheem/models/navigation_model.dart';
import 'package:tangheem/models/quick_links_model.dart'; import 'package:tangheem/models/quick_links_model.dart';
import 'package:tangheem/models/tangheem_type_model.dart'; import 'package:tangheem/models/tangheem_type_model.dart';
import 'api_client.dart'; import 'api_client.dart';
@ -112,4 +114,16 @@ class TangheemUserApiClient {
var postParams = {"statisticsTypeId": statisticsTypeId}; var postParams = {"statisticsTypeId": statisticsTypeId};
return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams); return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams);
} }
Future<NavigationModel> getNavigation() async {
String url = "${ApiConsts.tangheemUsers}Navigation_Get";
var postParams = {};
return await ApiClient().postJsonForObject((json) => NavigationModel.fromJson(json), url, postParams);
}
Future<MemberModel> getMembers() async {
String url = "${ApiConsts.tangheemUsers}Committee_Get";
var postParams = {};
return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams);
}
} }

@ -1,3 +1,4 @@
import 'package:tangheem/models/navigation_model.dart';
import 'package:tangheem/models/surah_model.dart'; import 'package:tangheem/models/surah_model.dart';
import 'package:tangheem/models/authentication_user_model.dart'; import 'package:tangheem/models/authentication_user_model.dart';
@ -18,4 +19,10 @@ class AppState {
void setAuthenticationModel(AuthenticationUserModel _authenticationUser) { void setAuthenticationModel(AuthenticationUserModel _authenticationUser) {
this._authenticationUser = _authenticationUser; this._authenticationUser = _authenticationUser;
} }
NavigationModel _navigationModel;
NavigationModel get getNavigationModel => _navigationModel;
void setNavigationModel(NavigationModel _navigationModel) {
this._navigationModel = _navigationModel;
}
} }

@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tangheem/ui/screens/bookmark_screen.dart'; import 'package:tangheem/ui/screens/bookmark_screen.dart';
import 'package:tangheem/ui/screens/contact_us_screen.dart'; import 'package:tangheem/ui/screens/contact_us_screen.dart';
import 'package:tangheem/ui/screens/member_screen.dart';
import 'ui/common_appbar.dart'; import 'ui/common_appbar.dart';
import 'ui/screens/forgot_password_screen.dart'; import 'ui/screens/forgot_password_screen.dart';
import 'ui/screens/home_screen.dart'; import 'ui/screens/home_screen.dart';
@ -47,6 +48,9 @@ class Application extends StatelessWidget {
case BookmarkScreen.routeName: case BookmarkScreen.routeName:
className = CommonAppbar(child: BookmarkScreen()); className = CommonAppbar(child: BookmarkScreen());
break; break;
case MemberScreen.routeName:
className = CommonAppbar(child: MemberScreen());
break;
case TangheemScreen.routeName: case TangheemScreen.routeName:
Map<String, Object> data = settings.arguments; Map<String, Object> data = settings.arguments;
className = CommonAppbar( className = CommonAppbar(
@ -67,6 +71,9 @@ class Application extends StatelessWidget {
className = CommonAppbar(child: QuranScreen(bookmark: bookMark)); className = CommonAppbar(child: QuranScreen(bookmark: bookMark));
break; break;
} }
if (className == null) {
return null;
}
return goToNavigation(className); return goToNavigation(className);
}, },
); );

@ -0,0 +1,68 @@
class MemberModel {
int totalItemsCount;
int statusCode;
String message;
List<MemberDataModel> data;
MemberModel({this.totalItemsCount, this.statusCode, this.message, this.data});
MemberModel.fromJson(Map<String, dynamic> json) {
totalItemsCount = json['totalItemsCount'];
statusCode = json['statusCode'];
message = json['message'];
if (json['data'] != null) {
data = new List<MemberDataModel>();
json['data'].forEach((v) {
data.add(new MemberDataModel.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['totalItemsCount'] = this.totalItemsCount;
data['statusCode'] = this.statusCode;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class MemberDataModel {
int committeeId;
String firstName;
String lastName;
String description;
String picture;
int orderNo;
MemberDataModel(
{this.committeeId,
this.firstName,
this.lastName,
this.description,
this.picture,
this.orderNo});
MemberDataModel.fromJson(Map<String, dynamic> json) {
committeeId = json['committeeId'];
firstName = json['firstName'];
lastName = json['lastName'];
description = json['description'];
picture = json['picture'];
orderNo = json['orderNo'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['committeeId'] = this.committeeId;
data['firstName'] = this.firstName;
data['lastName'] = this.lastName;
data['description'] = this.description;
data['picture'] = this.picture;
data['orderNo'] = this.orderNo;
return data;
}
}

@ -0,0 +1,81 @@
class NavigationModel {
int totalItemsCount;
int statusCode;
String message;
List<NavigationDataModel> data;
NavigationModel(
{this.totalItemsCount, this.statusCode, this.message, this.data});
NavigationModel.fromJson(Map<String, dynamic> json) {
totalItemsCount = json['totalItemsCount'];
statusCode = json['statusCode'];
message = json['message'];
if (json['data'] != null) {
data = new List<NavigationDataModel>();
json['data'].forEach((v) {
data.add(new NavigationDataModel.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['totalItemsCount'] = this.totalItemsCount;
data['statusCode'] = this.statusCode;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class NavigationDataModel {
int navigationId;
String navigationText;
String navigationUrl;
String mobileNavigationUrl;
String categoryName;
String fontIcon;
int parentId;
int orderNo;
int roleId;
NavigationDataModel(
{this.navigationId,
this.navigationText,
this.navigationUrl,
this.mobileNavigationUrl,
this.categoryName,
this.fontIcon,
this.parentId,
this.orderNo,
this.roleId});
NavigationDataModel.fromJson(Map<String, dynamic> json) {
navigationId = json['navigationId'];
navigationText = json['navigationText'];
navigationUrl = json['navigationUrl'];
mobileNavigationUrl = json['mobileNavigationUrl'];
categoryName = json['categoryName'];
fontIcon = json['fontIcon'];
parentId = json['parentId'];
orderNo = json['orderNo'];
roleId = json['roleId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['navigationId'] = this.navigationId;
data['navigationText'] = this.navigationText;
data['navigationUrl'] = this.navigationUrl;
data['mobileNavigationUrl'] = this.mobileNavigationUrl;
data['categoryName'] = this.categoryName;
data['fontIcon'] = this.fontIcon;
data['parentId'] = this.parentId;
data['orderNo'] = this.orderNo;
data['roleId'] = this.roleId;
return data;
}
}

@ -6,6 +6,7 @@ import 'package:tangheem/app_state/app_state.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/consts.dart'; import 'package:tangheem/classes/consts.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/navigation_model.dart';
import 'package:tangheem/models/quick_links_model.dart'; import 'package:tangheem/models/quick_links_model.dart';
import 'package:tangheem/ui/screens/bookmark_screen.dart'; import 'package:tangheem/ui/screens/bookmark_screen.dart';
import 'package:tangheem/ui/screens/contact_us_screen.dart'; import 'package:tangheem/ui/screens/contact_us_screen.dart';
@ -29,11 +30,28 @@ class CommonAppbar extends StatefulWidget {
class _CommonAppbarState extends State<CommonAppbar> { class _CommonAppbarState extends State<CommonAppbar> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
List<QuickLinksData> quickLinks = []; List<QuickLinksData> quickLinks = [];
List<NavigationDataModel> navigationList = [];
@override @override
void initState() { void initState() {
super.initState(); super.initState();
getQuickLinks();
getPrefs(); getPrefs();
getNavigation();
getQuickLinks();
}
void getNavigation() async {
if (AppState().getNavigationModel?.data == null) {
try {
var model = await TangheemUserApiClient().getNavigation();
navigationList = model?.data ?? [];
navigationList.sort((a, b) => a.orderNo.compareTo(b.orderNo));
AppState().setNavigationModel(model);
} catch (ex) {}
} else {
navigationList = AppState().getNavigationModel.data;
}
setState(() {});
} }
void getQuickLinks() async { void getQuickLinks() async {
@ -168,109 +186,182 @@ class _CommonAppbarState extends State<CommonAppbar> {
), ),
), ),
Expanded( Expanded(
child: ListView( child: ListView.builder(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
padding: EdgeInsets.only(left: 24, right: 24), padding: EdgeInsets.only(left: 24, right: 24),
children: [ itemCount: navigationList.length,
myListItem("assets/icons/home.svg", "الرئيسية", true), itemBuilder: (context, index) {
SizedBox(height: 2), String icon = "";
myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false), if (navigationList[index].navigationId == 5) {
Container( icon = "assets/icons/home.svg";
width: double.infinity, }
child: Row( if (navigationList[index].navigationId == 6) {
children: [ icon = "assets/icons/encyclopedia.svg";
Expanded( }
child: myListItem("assets/icons/about.svg", "التعريف بموسوعة تنغيم", false), if (navigationList[index].navigationId == 7) {
), icon = "assets/icons/copyrights.svg";
Container( }
// width: 35, if (navigationList[index].navigationId == 8) {
height: 40, icon = "assets/icons/about.svg";
margin: EdgeInsets.only(right: 17, left: 10), }
// color: Const.primaryBlack, if (navigationList[index].navigationId == 9) {
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1), icon = "assets/icons/browse.svg";
), }
], if (navigationList[index].navigationId == 11) {
), icon = "assets/icons/members.svg";
), }
Container( if (navigationList[index].navigationId == 12) {
width: double.infinity, icon = "assets/icons/read_quran.svg";
child: Row( }
children: [ if (navigationList[index].navigationId == 13) {
Expanded( icon = "assets/icons/contact.svg";
child: myListItem("assets/icons/browse.svg", "تصفح الموسوعة", false), }
),
Container( if (navigationList[index].parentId == 1) {
// width: 35, return myListItem(icon, navigationList[index].navigationText, navigationList[index].orderNo == 1 ? true : false, onTap: () {
height: 40, String url = navigationList[index]?.mobileNavigationUrl ?? "";
margin: EdgeInsets.only(right: 17, left: 10), if (url.isEmpty || url.length < 2) {
// color: Const.primaryBlack, return;
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1), }
), Navigator.pushNamed(context, url, arguments: null);
], });
), } else {
), return Container(
Container( width: double.infinity,
width: double.infinity, child: Row(
child: Row( children: [
children: [ Expanded(
Expanded( child: myListItem(icon, navigationList[index].navigationText, false, onTap: () {
child: myListItem("assets/icons/download.svg", "تنزيل الموسوعة", false), String url = navigationList[index]?.mobileNavigationUrl ?? "";
), if (url.isEmpty) {
Container( return;
// width: 35, }
height: 40, Navigator.pushNamed(context, url, arguments: null);
margin: EdgeInsets.only(right: 17, left: 10), }),
// color: Const.primaryBlack, ),
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1), Container(
), // width: 35,
], height: 40,
), margin: EdgeInsets.only(right: 17, left: 10),
), // color: Const.primaryBlack,
Container( child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
width: double.infinity, ),
child: Row( ],
children: [ ),
Expanded( );
child: myListItem("assets/icons/copyrights.svg", "حقوق الموسوعة", false), }
), })
Container(
// width: 35, // ListView(
height: 40, // physics: BouncingScrollPhysics(),
margin: EdgeInsets.only(right: 17, left: 10), // padding: EdgeInsets.only(left: 24, right: 24),
// color: Const.primaryBlack, // children: [
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1), // //
), // // for(int i=0;i<navigationList.length;i++)
], // // if(navigationList[i].parentId==1)
), // // myListItem("assets/icons/home.svg", "الرئيسية", true),
), //
Container( //
width: double.infinity, //
child: Row( // myListItem("assets/icons/home.svg", "الرئيسية", true),
children: [ // SizedBox(height: 2),
Expanded( // myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false),
child: myListItem("assets/icons/members.svg", "اللجنة الاستشارية", false), // Container(
), // width: double.infinity,
Container( // child: Row(
// width: 35, // children: [
height: 40, // Expanded(
margin: EdgeInsets.only(right: 17, left: 10), // child: myListItem("assets/icons/about.svg", "التعريف بموسوعة تنغيم", false),
// color: Const.primaryBlack, // ),
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1), // Container(
), // // width: 35,
], // height: 40,
), // margin: EdgeInsets.only(right: 17, left: 10),
), // // color: Const.primaryBlack,
SizedBox(height: 2), // child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
myListItem("assets/icons/read_quran.svg", "اقرأ القرآن الكريم", false, onTap: () { // ),
Navigator.pushNamed(context, QuranScreen.routeName, arguments: null); // ],
}), // ),
SizedBox(height: 2), // ),
myListItem("assets/icons/contact.svg", "الاتصال بنا", false, onTap: () { // Container(
Navigator.pushNamed(context, ContactUsScreen.routeName, arguments: ""); // width: double.infinity,
}), // child: Row(
], // children: [
), // Expanded(
), // child: myListItem("assets/icons/browse.svg", "تصفح الموسوعة", false),
// ),
// Container(
// // width: 35,
// height: 40,
// margin: EdgeInsets.only(right: 17, left: 10),
// // color: Const.primaryBlack,
// child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
// ),
// ],
// ),
// ),
// Container(
// width: double.infinity,
// child: Row(
// children: [
// Expanded(
// child: myListItem("assets/icons/download.svg", "تنزيل الموسوعة", false),
// ),
// Container(
// // width: 35,
// height: 40,
// margin: EdgeInsets.only(right: 17, left: 10),
// // color: Const.primaryBlack,
// child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
// ),
// ],
// ),
// ),
// Container(
// width: double.infinity,
// child: Row(
// children: [
// Expanded(
// child: myListItem("assets/icons/copyrights.svg", "حقوق الموسوعة", false),
// ),
// Container(
// // width: 35,
// height: 40,
// margin: EdgeInsets.only(right: 17, left: 10),
// // color: Const.primaryBlack,
// child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
// ),
// ],
// ),
// ),
// Container(
// width: double.infinity,
// child: Row(
// children: [
// Expanded(
// child: myListItem("assets/icons/members.svg", "اللجنة الاستشارية", false),
// ),
// Container(
// // width: 35,
// height: 40,
// margin: EdgeInsets.only(right: 17, left: 10),
// // color: Const.primaryBlack,
// child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
// ),
// ],
// ),
// ),
// SizedBox(height: 2),
// myListItem("assets/icons/read_quran.svg", "اقرأ القرآن الكريم", false, onTap: () {
// Navigator.pushNamed(context, QuranScreen.routeName, arguments: null);
// }),
// SizedBox(height: 2),
// myListItem("assets/icons/contact.svg", "الاتصال بنا", false, onTap: () {
// Navigator.pushNamed(context, ContactUsScreen.routeName, arguments: "");
// }),
// ],
// ),
),
Container( Container(
margin: EdgeInsets.only(top: 16, bottom: 12), margin: EdgeInsets.only(top: 16, bottom: 12),
padding: EdgeInsets.only(left: 32, right: 32), padding: EdgeInsets.only(left: 32, right: 32),

@ -0,0 +1,104 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/member_model.dart';
import 'package:tangheem/ui/misc/no_data_ui.dart';
class MemberScreen extends StatefulWidget {
static const String routeName = "/members";
MemberScreen({Key key}) : super(key: key);
@override
_MemberScreenState createState() => _MemberScreenState();
}
class _MemberScreenState extends State<MemberScreen> {
List<MemberDataModel> membersList;
@override
void initState() {
super.initState();
getMembers();
}
void getMembers() async {
Utils.showLoading(context);
try {
var membersData = await TangheemUserApiClient().getMembers();
membersList = membersData?.data ?? [];
membersList.sort((a, b) => a.orderNo.compareTo(b.orderNo));
} catch (ex, tr) {
membersList = [];
Utils.handleException(ex, null);
} finally {
Utils.hideLoading(context);
}
setState(() {});
}
@override
Widget build(BuildContext context) {
return membersList == null
? SizedBox()
: membersList.isEmpty
? NoDataUI()
: ListView.separated(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.all(16),
itemCount: membersList.length,
separatorBuilder: (context, index) {
return SizedBox(height: 8);
},
itemBuilder: (context, index) {
String encodedImage = membersList.elementAt(index).picture;
if (encodedImage.contains("data:image/png;base64,")) {
encodedImage = encodedImage.replaceAll("data:image/png;base64,", "");
}
var temp = base64Decode(encodedImage);
return ListTile(
tileColor: Colors.white,
leading: Container(
width: 50.0,
height: 50.0,
decoration: BoxDecoration(
image: membersList.length < 1
? null
: DecorationImage(
fit: BoxFit.cover,
image: MemoryImage(temp),
),
borderRadius: BorderRadius.all(
Radius.circular(30.0),
),
),
child: membersList.length < 1
? ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(30.0),
),
child: SvgPicture.asset(
"assets/icons/chat_user.svg",
clipBehavior: Clip.antiAlias,
),
)
: null,
),
title: Text(
membersList[index].firstName + " " + membersList[index].lastName,
style: TextStyle(fontSize: 14, color: ColorConsts.primaryBlue),
),
subtitle: Text(
" ${membersList[index].description}",
style: TextStyle(fontSize: 12, color: ColorConsts.primaryBlue),
),
isThreeLine: true,
);
},
);
}
}

@ -22,7 +22,7 @@ import 'package:tangheem/widgets/text_highlight_widget.dart';
import 'tangheem_detail_screen.dart'; import 'tangheem_detail_screen.dart';
class QuranScreen extends StatefulWidget { class QuranScreen extends StatefulWidget {
static const String routeName = "/surah"; static const String routeName = "/quran";
final BookMarkModel bookmark; final BookMarkModel bookmark;
QuranScreen({Key key, this.bookmark}) : super(key: key); QuranScreen({Key key, this.bookmark}) : super(key: key);

@ -57,8 +57,7 @@ class _TangheemScreenState extends State<TangheemScreen> {
return _dataList == null return _dataList == null
? SizedBox() ? SizedBox()
: _dataList.isEmpty : _dataList.isEmpty
? //AyaRecordWidget() ? NoDataUI()
NoDataUI()
: ListView.separated( : ListView.separated(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -70,8 +69,9 @@ class _TangheemScreenState extends State<TangheemScreen> {
return InkWell( return InkWell(
onTap: () { onTap: () {
List<AyatTangheemTypeMappedData> list = []; List<AyatTangheemTypeMappedData> list = [];
list = _ayatTangheemTypeMapped?.data?.where((element) => (element.ayahNo == _dataList[index].ayahNo) && (element.tangheemTypeId == _dataList[index].tangheemTypeId))?.toList() ?? []; list =
Navigator.pushNamed(context, TangheemDetailScreen.routeName, arguments:list); _ayatTangheemTypeMapped?.data?.where((element) => (element.ayahNo == _dataList[index].ayahNo) && (element.tangheemTypeId == _dataList[index].tangheemTypeId))?.toList() ?? [];
Navigator.pushNamed(context, TangheemDetailScreen.routeName, arguments: list);
}, },
borderRadius: BorderRadius.circular(4), borderRadius: BorderRadius.circular(4),
child: Container( child: Container(

Loading…
Cancel
Save