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/discussion_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/tangheem_type_model.dart';
import 'api_client.dart';
@ -112,4 +114,16 @@ class TangheemUserApiClient {
var postParams = {"statisticsTypeId": statisticsTypeId};
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/authentication_user_model.dart';
@ -18,4 +19,10 @@ class AppState {
void setAuthenticationModel(AuthenticationUserModel _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:tangheem/ui/screens/bookmark_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/screens/forgot_password_screen.dart';
import 'ui/screens/home_screen.dart';
@ -47,6 +48,9 @@ class Application extends StatelessWidget {
case BookmarkScreen.routeName:
className = CommonAppbar(child: BookmarkScreen());
break;
case MemberScreen.routeName:
className = CommonAppbar(child: MemberScreen());
break;
case TangheemScreen.routeName:
Map<String, Object> data = settings.arguments;
className = CommonAppbar(
@ -67,6 +71,9 @@ class Application extends StatelessWidget {
className = CommonAppbar(child: QuranScreen(bookmark: bookMark));
break;
}
if (className == null) {
return null;
}
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/consts.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/ui/screens/bookmark_screen.dart';
import 'package:tangheem/ui/screens/contact_us_screen.dart';
@ -29,11 +30,28 @@ class CommonAppbar extends StatefulWidget {
class _CommonAppbarState extends State<CommonAppbar> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
List<QuickLinksData> quickLinks = [];
List<NavigationDataModel> navigationList = [];
@override
void initState() {
super.initState();
getQuickLinks();
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 {
@ -168,109 +186,182 @@ class _CommonAppbarState extends State<CommonAppbar> {
),
),
Expanded(
child: ListView(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.only(left: 24, right: 24),
children: [
myListItem("assets/icons/home.svg", "الرئيسية", true),
SizedBox(height: 2),
myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false),
Container(
width: double.infinity,
child: Row(
children: [
Expanded(
child: myListItem("assets/icons/about.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/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: "");
}),
],
),
),
child: ListView.builder(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.only(left: 24, right: 24),
itemCount: navigationList.length,
itemBuilder: (context, index) {
String icon = "";
if (navigationList[index].navigationId == 5) {
icon = "assets/icons/home.svg";
}
if (navigationList[index].navigationId == 6) {
icon = "assets/icons/encyclopedia.svg";
}
if (navigationList[index].navigationId == 7) {
icon = "assets/icons/copyrights.svg";
}
if (navigationList[index].navigationId == 8) {
icon = "assets/icons/about.svg";
}
if (navigationList[index].navigationId == 9) {
icon = "assets/icons/browse.svg";
}
if (navigationList[index].navigationId == 11) {
icon = "assets/icons/members.svg";
}
if (navigationList[index].navigationId == 12) {
icon = "assets/icons/read_quran.svg";
}
if (navigationList[index].navigationId == 13) {
icon = "assets/icons/contact.svg";
}
if (navigationList[index].parentId == 1) {
return myListItem(icon, navigationList[index].navigationText, navigationList[index].orderNo == 1 ? true : false, onTap: () {
String url = navigationList[index]?.mobileNavigationUrl ?? "";
if (url.isEmpty || url.length < 2) {
return;
}
Navigator.pushNamed(context, url, arguments: null);
});
} else {
return Container(
width: double.infinity,
child: Row(
children: [
Expanded(
child: myListItem(icon, navigationList[index].navigationText, false, onTap: () {
String url = navigationList[index]?.mobileNavigationUrl ?? "";
if (url.isEmpty) {
return;
}
Navigator.pushNamed(context, url, arguments: null);
}),
),
Container(
// width: 35,
height: 40,
margin: EdgeInsets.only(right: 17, left: 10),
// color: Const.primaryBlack,
child: VerticalDivider(color: ColorConsts.primaryBlack, thickness: .7, width: 1),
),
],
),
);
}
})
// ListView(
// physics: BouncingScrollPhysics(),
// padding: EdgeInsets.only(left: 24, right: 24),
// children: [
// //
// // for(int i=0;i<navigationList.length;i++)
// // if(navigationList[i].parentId==1)
// // myListItem("assets/icons/home.svg", "الرئيسية", true),
//
//
//
// myListItem("assets/icons/home.svg", "الرئيسية", true),
// SizedBox(height: 2),
// myListItem("assets/icons/encyclopedia.svg", "موسوعة تنغيم", false),
// Container(
// width: double.infinity,
// child: Row(
// children: [
// Expanded(
// child: myListItem("assets/icons/about.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/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(
margin: EdgeInsets.only(top: 16, bottom: 12),
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';
class QuranScreen extends StatefulWidget {
static const String routeName = "/surah";
static const String routeName = "/quran";
final BookMarkModel bookmark;
QuranScreen({Key key, this.bookmark}) : super(key: key);

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

Loading…
Cancel
Save