diff --git a/assets/images/drawer/change_password.svg b/assets/images/drawer/change_password.svg
new file mode 100644
index 0000000..7e953d2
--- /dev/null
+++ b/assets/images/drawer/change_password.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/drawer/employee_id.svg b/assets/images/drawer/employee_id.svg
new file mode 100644
index 0000000..b40b670
--- /dev/null
+++ b/assets/images/drawer/employee_id.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/images/drawer/logout.svg b/assets/images/drawer/logout.svg
new file mode 100644
index 0000000..acdc741
--- /dev/null
+++ b/assets/images/drawer/logout.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/drawer/mowadhafi.svg b/assets/images/drawer/mowadhafi.svg
new file mode 100644
index 0000000..b76f9b8
--- /dev/null
+++ b/assets/images/drawer/mowadhafi.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/images/drawer/my_profile.svg b/assets/images/drawer/my_profile.svg
new file mode 100644
index 0000000..45b9155
--- /dev/null
+++ b/assets/images/drawer/my_profile.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/images/drawer/my_requests.svg b/assets/images/drawer/my_requests.svg
new file mode 100644
index 0000000..223beee
--- /dev/null
+++ b/assets/images/drawer/my_requests.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/images/drawer/my_team.svg b/assets/images/drawer/my_team.svg
new file mode 100644
index 0000000..9eae21b
--- /dev/null
+++ b/assets/images/drawer/my_team.svg
@@ -0,0 +1,34 @@
+
diff --git a/assets/images/drawer/pending_trasactions.svg b/assets/images/drawer/pending_trasactions.svg
new file mode 100644
index 0000000..5975ca3
--- /dev/null
+++ b/assets/images/drawer/pending_trasactions.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/images/drawer/performance_evaluation.svg b/assets/images/drawer/performance_evaluation.svg
new file mode 100644
index 0000000..534b5a6
--- /dev/null
+++ b/assets/images/drawer/performance_evaluation.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/images/drawer/view_business_card.svg b/assets/images/drawer/view_business_card.svg
new file mode 100644
index 0000000..5544e05
--- /dev/null
+++ b/assets/images/drawer/view_business_card.svg
@@ -0,0 +1,11 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index 1ba7218..5353a84 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -97,6 +97,7 @@
"cancel": "إلغاء",
"requestedItems": "العناصر المطلوبة",
"request": "طلب",
+ "myRequest": "طلبي",
"actions": "أجراءات",
"delegate": "مندوب",
"request_info": "اطلب معلومات",
@@ -311,6 +312,9 @@
"requestType": "نوع الطلب",
"employeeDigitalID": "هويةالموظف الرقمية",
"businessCard": "بطاقة العمل",
+ "viewBusinessCard": "عرض بطاقة العمل",
+ "performanceEvaluation": "تقييم الأداء",
+ "logout": "تسجيل خروج",
"checkOut": "وقت الخروج",
"regular": "منتظم",
"mark": "علامة",
@@ -341,13 +345,12 @@
"pleaseSelectDate": "الرجاء تحديد التاريخ",
"todayAttendance": "حضور اليوم",
"viewAttendance": "عرض الحضور",
- "teamMembers":"اعضاءالفريق",
+ "teamMembers": "اعضاءالفريق",
"profileDetails": "الملف الشخصي",
- "noResultsFound" : "لايوجد نتائج",
+ "noResultsFound": "لايوجد نتائج",
"searchBy": "بحث بواسطة",
"myTeamMembers": "اعضاء فريقي",
"save": "حفظ",
- "itemType": "نوع العنصر",
"TurnNotificationsFor": "تفعيل الاشعارات",
"worklistSettings": "اعدادات الاشعارات",
"absenceType": "نوع الغياب",
@@ -358,6 +361,8 @@
"absenceStatus": "حالة الغياب",
"subordinateLeave": "إجازة التابعيين",
"numberDays": "عدد الأيام",
+ "poweredBy": "مشغل بواسطة",
+ "cloudSolutions": "حلول السحابة",
"profile": {
"reset_password": {
"label": "Reset Password",
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 47d33b9..18bf326 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -94,6 +94,7 @@
"cancel": "Cancel",
"requestedItems": "Requested Items",
"request": "Request",
+ "myRequest": "My Request",
"actions": "Actions",
"delegate": "Delegate",
"request_info": "Request Info",
@@ -311,6 +312,9 @@
"wantToReject": "Are you sure want to reject?",
"employeeDigitalID": "Employee Digital ID",
"businessCard": "Business Card",
+ "viewBusinessCard": "View Business Card",
+ "performanceEvaluation": "Performance Evaluation",
+ "logout": "Logout",
"checkOut": "Check Out",
"regular": "Regular",
"mark": "Mark",
@@ -341,13 +345,12 @@
"pleaseSelectDate": "Please select date",
"todayAttendance": "Today's Attendance",
"viewAttendance": "View Attendance",
- "teamMembers":"Team Members",
+ "teamMembers": "Team Members",
"profileDetails": "Profile Details",
- "noResultsFound" : "No Results Found",
+ "noResultsFound": "No Results Found",
"searchBy": "Search by",
"myTeamMembers": "My Team Members",
"save": "Save",
- "itemType": "Item Type",
"TurnNotificationsFor": "Turn on notifications for",
"worklistSettings": "Worklist Settings",
"absenceType": "Absence Type",
@@ -356,6 +359,8 @@
"hours": "Hours",
"approvalStatus": "Approval Status",
"absenceStatus": "Absence Status",
+ "poweredBy": "Powered By",
+ "cloudSolutions": "Cloud Solutions",
"subordinateLeave": "Subordinate Leave",
"numberDays": "Number of days",
"profile": {
diff --git a/lib/api/dashboard_api_client.dart b/lib/api/dashboard_api_client.dart
index 1dd58b1..5b00e7f 100644
--- a/lib/api/dashboard_api_client.dart
+++ b/lib/api/dashboard_api_client.dart
@@ -5,6 +5,7 @@ import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
+import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:uuid/uuid.dart';
@@ -66,13 +67,13 @@ class DashboardApiClient {
}
//Menus List
- Future getListMenu() async {
+ Future> getListMenu() async {
String url = "${ApiConsts.erpRest}GET_MENU";
Map postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
+ return responseData.listMenu ?? [];
}, url, postParams);
}
diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart
index 8f280b1..30c7e2e 100644
--- a/lib/extensions/string_extensions.dart
+++ b/lib/extensions/string_extensions.dart
@@ -15,9 +15,9 @@ extension CapExtension on String {
extension EmailValidator on String {
Widget get toWidget => Text(this);
- Widget toText10({Color? color, bool isBold = false, int maxLine = 0}) => Text(
+ Widget toText10({Color? color, bool isBold = false, int? maxLine}) => Text(
this,
- maxLines: (maxLine > 0) ? maxLine : null,
+ maxLines: maxlines,
style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
);
@@ -50,21 +50,22 @@ extension EmailValidator on String {
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null),
);
- Widget toText14({Color? color, bool isBold = false, int? maxlines}) => Text(
+ Widget toText14({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text(
this,
maxLines: maxlines,
- style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
+ style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)),
);
- Widget toText16({Color? color, bool isBold = false, int? maxlines, bool isUnderLine = false}) => Text(
+ Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines}) => Text(
this,
maxLines: maxlines,
style: TextStyle(
- color: color ?? MyColors.darkTextColor,
- fontSize: 16,
- letterSpacing: -0.64,
- fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
- decoration: isUnderLine ? TextDecoration.underline : TextDecoration.none),
+ color: color ?? MyColors.darkTextColor,
+ fontSize: 16,
+ letterSpacing: -0.64,
+ fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
+ decoration: isUnderLine ? TextDecoration.underline : null,
+ ),
);
Widget toText17({Color? color, bool isBold = false}) => Text(
@@ -72,6 +73,11 @@ extension EmailValidator on String {
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
);
+ Widget toText18({Color? color, bool isBold = false}) => Text(
+ this,
+ style: TextStyle(fontSize: 18, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.08),
+ );
+
Widget toText20({Color? color, bool isBold = false}) => Text(
this,
style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart
index 7452524..255e04e 100644
--- a/lib/generated/codegen_loader.g.dart
+++ b/lib/generated/codegen_loader.g.dart
@@ -113,6 +113,7 @@ class CodegenLoader extends AssetLoader{
"cancel": "إلغاء",
"requestedItems": "العناصر المطلوبة",
"request": "طلب",
+ "myRequest": "طلبي",
"actions": "أجراءات",
"delegate": "مندوب",
"request_info": "اطلب معلومات",
@@ -327,6 +328,9 @@ class CodegenLoader extends AssetLoader{
"requestType": "نوع الطلب",
"employeeDigitalID": "هويةالموظف الرقمية",
"businessCard": "بطاقة العمل",
+ "viewBusinessCard": "عرض بطاقة العمل",
+ "performanceEvaluation": "تقييم الأداء",
+ "logout": "تسجيل خروج",
"checkOut": "وقت الخروج",
"regular": "منتظم",
"mark": "علامة",
@@ -373,6 +377,8 @@ class CodegenLoader extends AssetLoader{
"absenceStatus": "حالة الغياب",
"subordinateLeave": "إجازة التابعيين",
"numberDays": "عدد الأيام",
+ "poweredBy": "مشغل بواسطة",
+ "cloudSolutions": "حلول السحابة",
"profile": {
"reset_password": {
"label": "Reset Password",
@@ -503,6 +509,7 @@ static const Map en_US = {
"cancel": "Cancel",
"requestedItems": "Requested Items",
"request": "Request",
+ "myRequest": "My Request",
"actions": "Actions",
"delegate": "Delegate",
"request_info": "Request Info",
@@ -720,6 +727,9 @@ static const Map en_US = {
"wantToReject": "Are you sure want to reject?",
"employeeDigitalID": "Employee Digital ID",
"businessCard": "Business Card",
+ "viewBusinessCard": "View Business Card",
+ "performanceEvaluation": "Performance Evaluation",
+ "logout": "Logout",
"checkOut": "Check Out",
"regular": "Regular",
"mark": "Mark",
@@ -766,6 +776,8 @@ static const Map en_US = {
"absenceStatus": "Absence Status",
"subordinateLeave": "Subordinate Leave",
"numberDays": "Number of days",
+ "poweredBy": "Powered By",
+ "cloudSolutions": "Cloud Solutions",
"profile": {
"reset_password": {
"label": "Reset Password",
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index 12fb29a..8c6247b 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -98,6 +98,7 @@ abstract class LocaleKeys {
static const cancel = 'cancel';
static const requestedItems = 'requestedItems';
static const request = 'request';
+ static const myRequest = 'myRequest';
static const actions = 'actions';
static const delegate = 'delegate';
static const request_info = 'request_info';
@@ -312,6 +313,9 @@ abstract class LocaleKeys {
static const requestType = 'requestType';
static const employeeDigitalID = 'employeeDigitalID';
static const businessCard = 'businessCard';
+ static const viewBusinessCard = 'viewBusinessCard';
+ static const performanceEvaluation = 'performanceEvaluation';
+ static const logout = 'logout';
static const checkOut = 'checkOut';
static const regular = 'regular';
static const mark = 'mark';
@@ -356,6 +360,8 @@ abstract class LocaleKeys {
static const hours = 'hours';
static const approvalStatus = 'approvalStatus';
static const absenceStatus = 'absenceStatus';
+ static const poweredBy = 'poweredBy';
+ static const cloudSolutions = 'cloudSolutions';
static const subordinateLeave = 'subordinateLeave';
static const numberDays = 'numberDays';
static const profile_reset_password_label = 'profile.reset_password.label';
diff --git a/lib/models/dashboard/drawer_menu_item_model.dart b/lib/models/dashboard/drawer_menu_item_model.dart
new file mode 100644
index 0000000..54a7bfc
--- /dev/null
+++ b/lib/models/dashboard/drawer_menu_item_model.dart
@@ -0,0 +1,7 @@
+class DrawerMenuItem {
+ String icon;
+ String title;
+ String routeName;
+
+ DrawerMenuItem(this.icon, this.title, this.routeName);
+}
diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart
index 289ab33..5c4b20f 100644
--- a/lib/provider/dashboard_provider_model.dart
+++ b/lib/provider/dashboard_provider_model.dart
@@ -1,16 +1,17 @@
-import 'dart:convert';
-
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
import 'package:mohem_flutter_app/api/offers_and_discounts_api_client.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
+import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart';
+import 'package:mohem_flutter_app/models/dashboard/drawer_menu_item_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart';
import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
+import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/dashboard/menus.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
@@ -144,20 +145,28 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
//List Menu API's & Methods
+
+ List drawerMenuItemList = [
+ DrawerMenuItem("assets/images/drawer/my_profile.svg", LocaleKeys.myProfile.tr(), AppRoutes.profile),
+ DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), ""),
+ DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi),
+ DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions),
+ DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), ""),
+ ];
+
void fetchListMenu() async {
try {
- GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu();
- Map map = {};
- print(jsonEncode(genericResponseModel!.listMenu));
- for (int i = 0; i < genericResponseModel.listMenu!.length; i++) {
- print(genericResponseModel.listMenu![i].menuName ?? "");
- map[genericResponseModel.listMenu![i].menuName ?? ""] = i.toString();
+ List menuList = await DashboardApiClient().getListMenu();
+ List findMyRequest = menuList.where((element) => element.menuName == "My Requests").toList();
+ if (findMyRequest.isNotEmpty) {
+ drawerMenuItemList.insert(3, DrawerMenuItem("assets/images/drawer/my_requests.svg", LocaleKeys.myRequest.tr(), AppRoutes.myTeam));
+ }
+ List findMyTeam = menuList.where((element) => element.menuName == "My Team").toList();
+ if (findMyTeam.isNotEmpty) {
+ drawerMenuItemList.insert(2, DrawerMenuItem("assets/images/drawer/my_team.svg", LocaleKeys.myTeamMembers.tr(), AppRoutes.myTeam));
}
- logger.i(map);
- notifyListeners();
} catch (ex) {
logger.wtf(ex);
- notifyListeners();
Utils.handleException(ex, null, null);
}
}
diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart
index 9a3baa0..ad5ba1d 100644
--- a/lib/ui/landing/dashboard_screen.dart
+++ b/lib/ui/landing/dashboard_screen.dart
@@ -43,6 +43,7 @@ class _DashboardScreenState extends State {
void initState() {
super.initState();
data = Provider.of(context, listen: false);
+ data.fetchListMenu();
data.fetchAttendanceTracking(context);
data.fetchWorkListCounter(context);
data.fetchMissingSwipe(context);
@@ -220,9 +221,11 @@ class _DashboardScreenState extends State {
),
],
),
- ).onPress(() {
- Navigator.pushNamed(context, AppRoutes.todayAttendance);
- }))
+ ).onPress(
+ () {
+ Navigator.pushNamed(context, AppRoutes.todayAttendance);
+ },
+ ))
.animatedSwither();
},
),
@@ -240,10 +243,10 @@ class _DashboardScreenState extends State {
8.height,
Container(
width: double.infinity,
- padding: EdgeInsets.only(top: 31),
+ padding: const EdgeInsets.only(top: 31),
decoration: BoxDecoration(
color: Colors.white,
- borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
+ borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
),
child: Column(
diff --git a/lib/ui/landing/widget/app_drawer.dart b/lib/ui/landing/widget/app_drawer.dart
index 70fc38f..7ea9748 100644
--- a/lib/ui/landing/widget/app_drawer.dart
+++ b/lib/ui/landing/widget/app_drawer.dart
@@ -1,12 +1,20 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
-import 'package:mohem_flutter_app/config/routes.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/colors.dart';
+import 'package:mohem_flutter_app/classes/utils.dart';
+import 'package:mohem_flutter_app/extensions/int_extensions.dart';
+import 'package:mohem_flutter_app/extensions/string_extensions.dart';
+import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
+import 'package:mohem_flutter_app/models/dashboard/drawer_menu_item_model.dart';
+import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/dialogs/id/business_card_dialog.dart';
import 'package:mohem_flutter_app/ui/dialogs/id/employee_digital_id_dialog.dart';
-import 'package:mohem_flutter_app/ui/landing/widget/drawer_item.dart';
import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart';
+import 'package:provider/provider.dart';
class AppDrawer extends StatefulWidget {
@override
@@ -14,104 +22,108 @@ class AppDrawer extends StatefulWidget {
}
class _AppDrawerState extends State {
+ List drawerMenuItemList = [];
+
@override
Widget build(BuildContext context) {
- return Container(
- color: Colors.white,
- child: Drawer(
- child: Column(children: [
- const SizedBox(
- height: 200,
- ),
- Expanded(
- child: ListView(padding: const EdgeInsets.all(21), physics: const BouncingScrollPhysics(), children: [
- Divider(),
- InkWell(
- child: DrawerItem(
- //'My Profile',
- LocaleKeys.myProfile.tr(),
- icon: Icons.person,
- color: Colors.grey,
- ),
- onTap: () {
- drawerNavigator(context, AppRoutes.profile);
- }),
- Divider(),
- InkWell(
- child: DrawerItem(
- // 'Mowadhafhi',
- LocaleKeys.mowadhafhi.tr(),
- icon: Icons.person,
- color: Colors.grey,
- ),
- onTap: () {
- drawerNavigator(context, AppRoutes.mowadhafhi);
- },
- ),
- Divider(),
- InkWell(
- child: DrawerItem(
- LocaleKeys.pendingTransactions.tr(),
- icon: Icons.person,
- color: Colors.grey,
- ),
- onTap: () {
- drawerNavigator(context, AppRoutes.pendingTransactions);
- },
- ),
- const Divider(),
- InkWell(
- child: DrawerItem(
- "My Team",
- icon: Icons.person,
- color: Colors.grey,
- ),
- onTap: () {
- drawerNavigator(context, AppRoutes.myTeam);
- },
- ),
- Divider(),
- InkWell(
- child: const DrawerItem(
- 'My Requests',
- icon: Icons.person,
- color: Colors.grey,
- ),
- onTap: () {
- drawerNavigator(context, AppRoutes.myRequests);
- }),
- InkWell(
- child: DrawerItem(
- LocaleKeys.employeeDigitalID.tr(),
- icon: Icons.insert_drive_file_outlined,
- color: Colors.grey,
- ),
- onTap: () {
- showMDialog(context, child: EmployeeDigitialIdDialog());
- },
- ),
- Divider(),
- InkWell(
- child: DrawerItem(
- LocaleKeys.businessCard.tr(),
- icon: Icons.insert_drive_file_outlined,
- color: Colors.grey,
+ if (drawerMenuItemList.isEmpty) {
+ drawerMenuItemList = Provider.of(context, listen: false).drawerMenuItemList;
+ }
+
+ return Drawer(
+ width: MediaQuery.of(context).size.width * 303 / 375,
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Image.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 24),
+ const Icon(Icons.clear).onPress(() => Navigator.pop(context)),
+ ],
+ ).paddingOnly(left: 4, right: 14),
+ Row(
+ children: [
+ CircleAvatar(
+ radius: 52 / 2,
+ backgroundImage: MemoryImage(Utils.getPostBytes(AppState().memberInformationList!.eMPLOYEEIMAGE)),
+ backgroundColor: Colors.black,
),
- onTap: () {
- showMDialog(context, child: BusinessCardDialog());
- },
- ),
- ]))
- ])));
+ 12.width,
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ AppState().memberInformationList!.eMPLOYEENAME!.toText18(isBold: true),
+ AppState().memberInformationList!.jOBNAME!.toText14(weight: FontWeight.w500),
+ ],
+ ).expanded
+ ],
+ ).paddingOnly(left: 14, right: 14, top: 21, bottom: 21),
+ const Divider(
+ height: 1,
+ thickness: 1,
+ color: MyColors.lightGreyEFColor,
+ ),
+ ListView(
+ padding: const EdgeInsets.only(top: 21, bottom: 21),
+ children: [
+ ListView.builder(
+ padding: EdgeInsets.zero,
+ shrinkWrap: true,
+ physics: const NeverScrollableScrollPhysics(),
+ itemCount: drawerMenuItemList.length,
+ itemBuilder: (cxt, index) {
+ return menuItem(drawerMenuItemList[index].icon, drawerMenuItemList[index].title, drawerMenuItemList[index].routeName, onPress: () {
+ Navigator.pushNamed(context, drawerMenuItemList[index].routeName);
+ });
+ }),
+ menuItem("assets/images/drawer/employee_id.svg", LocaleKeys.employeeDigitalID.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: EmployeeDigitialIdDialog())),
+ menuItem("assets/images/drawer/view_business_card.svg", LocaleKeys.viewBusinessCard.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: BusinessCardDialog())),
+ menuItem("assets/images/drawer/logout.svg", LocaleKeys.logout.tr(), "", color: MyColors.redA3Color, closeDrawer: false, onPress: () {}),
+ ],
+ ).expanded,
+ const Divider(
+ height: 1,
+ thickness: 1,
+ color: MyColors.lightGreyEFColor,
+ ),
+ Row(
+ children: [
+ RichText(
+ text: TextSpan(text: LocaleKeys.poweredBy.tr() + " ", style: const TextStyle(color: MyColors.grey98Color, fontSize: 14, letterSpacing: -0.56, fontWeight: FontWeight.w600), children: [
+ TextSpan(
+ text: LocaleKeys.cloudSolutions.tr(),
+ style: const TextStyle(color: MyColors.grey3AColor, fontSize: 14, letterSpacing: -0.56, fontWeight: FontWeight.w600),
+ ),
+ ]),
+ ).expanded,
+ Image.asset("assets/images/logos/bn_cloud_soloution.jpg", width: 40, height: 40)
+ ],
+ ).paddingOnly(left: 21, right: 21, top: 21)
+ ],
+ ).paddingOnly(top: 21, bottom: 21),
+ );
}
- void drawerNavigator(context, routeName) {
- Navigator.of(context).pushNamed(routeName);
+ Widget menuItem(String icon, String title, String routeName, {Color? color, bool closeDrawer = true, VoidCallback? onPress}) {
+ return Row(
+ children: [
+ SvgPicture.asset(
+ icon,
+ height: 20,
+ width: 20,
+ ),
+ 9.width,
+ title.toText14(color: color).expanded
+ ],
+ ).paddingOnly(left: 21, top: 10, bottom: 10).onPress(closeDrawer
+ ? () async {
+ Navigator.pop(context);
+ Future.delayed(const Duration(microseconds: 200), onPress);
+ }
+ : onPress!);
}
- String capitalizeOnlyFirstLater(String text) {
- if (text.trim().isEmpty) return "";
-
- return "${text[0].toUpperCase()}${text.substring(1)}";
+ void drawerNavigator(context, routeName) {
+ Navigator.of(context).pushNamed(routeName);
}
}
diff --git a/lib/ui/my_team/profile_details.dart b/lib/ui/my_team/profile_details.dart
index cfc1730..b1bf5df 100644
--- a/lib/ui/my_team/profile_details.dart
+++ b/lib/ui/my_team/profile_details.dart
@@ -3,11 +3,11 @@ import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
+import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
-
class ProfileDetails extends StatefulWidget {
const ProfileDetails({Key? key}) : super(key: key);
@@ -18,8 +18,6 @@ class ProfileDetails extends StatefulWidget {
class _ProfileDetailsState extends State {
GetEmployeeSubordinatesList? getEmployeeSubordinates;
-
-
@override
void initState() {
super.initState();
@@ -33,47 +31,26 @@ class _ProfileDetailsState extends State {
title: LocaleKeys.profileDetails.tr(),
),
backgroundColor: MyColors.backgroundColor,
- body: Column(
+ body: ListView(
+ padding: EdgeInsets.all(21),
children: [
- Container(
- width: double.infinity,
- margin: EdgeInsets.only(
- top: 20,
- left: 21,
- right: 21,
- ),
- padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 20),
- decoration: BoxDecoration(
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.5),
- spreadRadius: 5,
- blurRadius: 26,
- offset: Offset(0, 3),
- ),
- ],
- color: Colors.white,
- borderRadius: BorderRadius.circular(10.0),
- ),
- child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
- LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor),
- "${getEmployeeSubordinates?.eMPLOYMENTCATEGORYMEANING}".toText16(isBold: true, color: MyColors.darkTextColor),
- 23.height,
- LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor),
- "${getEmployeeSubordinates?.lOCATIONNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
- 23.height,
- LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor),
- "${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}".toText16(isBold: true, color: MyColors.darkTextColor),
- 23.height,
- LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor),
- "${getEmployeeSubordinates?.bUSINESSGROUPNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
- 23.height,
- LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor),
- "${getEmployeeSubordinates?.pAYROLLNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
- ]),
- ),
+ Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
+ LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor),
+ "${getEmployeeSubordinates?.eMPLOYMENTCATEGORYMEANING}".toText16(isBold: true, color: MyColors.darkTextColor),
+ 23.height,
+ LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor),
+ "${getEmployeeSubordinates?.lOCATIONNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
+ 23.height,
+ LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor),
+ "${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}".toText16(isBold: true, color: MyColors.darkTextColor),
+ 23.height,
+ LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor),
+ "${getEmployeeSubordinates?.bUSINESSGROUPNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
+ 23.height,
+ LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor),
+ "${getEmployeeSubordinates?.pAYROLLNAME}".toText16(isBold: true, color: MyColors.darkTextColor),
+ ]).objectContainerView(),
],
));
}
-
}
diff --git a/lib/ui/my_team/subordinate_leave.dart b/lib/ui/my_team/subordinate_leave.dart
index 9e69fdc..d9ca110 100644
--- a/lib/ui/my_team/subordinate_leave.dart
+++ b/lib/ui/my_team/subordinate_leave.dart
@@ -1,4 +1,3 @@
-
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
@@ -9,7 +8,6 @@ import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
-import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
@@ -18,7 +16,7 @@ import 'package:mohem_flutter_app/models/my_team/get_subordinates_leaves_total_v
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
-
+import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
class SubordinateLeave extends StatefulWidget {
const SubordinateLeave({Key? key}) : super(key: key);
@@ -33,19 +31,16 @@ class _SubordinateLeaveState extends State {
DateTime selectedDateTo = DateTime.now();
bool showList = false;
-
-
-
@override
void initState() {
super.initState();
}
- void getSubordinatesLeaves()async {
+ void getSubordinatesLeaves() async {
try {
Utils.showLoading(context);
getSubordinatesLeavesTotalList = await MyTeamApiClient().getSubordinatesLeavesList(DateUtil.convertDateToStringLocation(selectedDateFrom), DateUtil.convertDateToStringLocation(selectedDateTo));
- showList= true;
+ showList = true;
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
@@ -54,108 +49,85 @@ class _SubordinateLeaveState extends State {
}
}
-
@override
Widget build(BuildContext context) {
return Scaffold(
- appBar: AppBarWidget(
- context,
- title: LocaleKeys.subordinateLeave.tr(),
- ),
- backgroundColor: MyColors.backgroundColor,
- body: Column(
- children: [
- Expanded(
- child: SingleChildScrollView(
- scrollDirection: Axis.vertical,
- child: Column(
- children: [
- Column(
- children: [
- DynamicTextFieldWidget(
- LocaleKeys.dateFrom.tr(),
- selectedDateFrom.toString().split(" ")[0],
- suffixIconData: Icons.calendar_today,
- isEnable: false,
- onTap: () async {
- selectedDateFrom = await _selectDate(context, DateTime.now());
- setState(() {});
- },
- ),
- 12.height,
- DynamicTextFieldWidget(
- LocaleKeys.dateTo.tr(),
- selectedDateTo.toString().split(" ")[0],
- suffixIconData: Icons.calendar_today,
- isEnable: false,
- onTap: () async {
- selectedDateTo = await _selectDate(context, DateTime.now());
- setState(() {});
- },
- )
- ],
- ).objectContainerView(),
- Container(
- margin: EdgeInsets.only(left: 21, right: 21),
- width: MediaQuery.of(context).size.width,
- child: SingleChildScrollView(
- scrollDirection: Axis.vertical,
- child: Column(
- children: [
- showList? ListView.separated(
- scrollDirection: Axis.vertical,
- shrinkWrap: true,
- physics: ScrollPhysics(),
- separatorBuilder: (BuildContext cxt,int index) => 12.height,
- itemCount: getSubordinatesLeavesTotalList.length,
- itemBuilder: (BuildContext context,int index) {
- var diffDays = DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATEEND!).difference(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATESTART!)).inDays;
- return getSubordinatesLeavesTotalList.isEmpty
- ? Utils.getNoDataWidget(context)
- : Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- SvgPicture.asset("assets/images/user.svg"),
- 14.width,
- Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- "${getSubordinatesLeavesTotalList[index].eMPLOYEENAME}".toText16(isBold: true, color: MyColors.grey3AColor),
- 10.height,
- Row(
- children: [
- (LocaleKeys.from.tr() + ': ${DateUtil.getFormattedDate(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATESTART!), "MMM dd yyyy")}').toText10(isBold: true, color: MyColors.grey57Color),
- 14.width,
- (LocaleKeys.to.tr() + ': ${DateUtil.getFormattedDate(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATEEND!), "MMM dd yyyy")}').toText10(isBold: true, color: MyColors.grey57Color),
- ],
- ),
- (LocaleKeys.numberDays.tr()+ ": $diffDays").toText10(color: MyColors.grey3AColor),
- ],
- ).expanded
- ],
- ).objectContainerView();
- }
- )
- :Container(),
- ],
- ),
- ),
- ),
- ],
- ),
- ),
+ appBar: AppBarWidget(
+ context,
+ title: LocaleKeys.subordinateLeave.tr(),
+ ),
+ backgroundColor: MyColors.backgroundColor,
+ body: Column(
+ children: [
+ Expanded(
+ child: Column(
+ children: [
+ Column(
+ children: [
+ DynamicTextFieldWidget(
+ LocaleKeys.dateFrom.tr(),
+ selectedDateFrom.toString().split(" ")[0],
+ suffixIconData: Icons.calendar_today,
+ isEnable: false,
+ onTap: () async {
+ selectedDateFrom = await _selectDate(context, DateTime.now());
+ setState(() {});
+ },
+ ),
+ 12.height,
+ DynamicTextFieldWidget(
+ LocaleKeys.dateTo.tr(),
+ selectedDateTo.toString().split(" ")[0],
+ suffixIconData: Icons.calendar_today,
+ isEnable: false,
+ onTap: () async {
+ selectedDateTo = await _selectDate(context, DateTime.now());
+ setState(() {});
+ },
+ )
+ ],
+ ).objectContainerView(),
+ if (showList)
+ ListView.separated(
+ scrollDirection: Axis.vertical,
+ physics: ScrollPhysics(),
+ padding: const EdgeInsets.all(21),
+ separatorBuilder: (BuildContext cxt, int index) => 12.height,
+ itemCount: getSubordinatesLeavesTotalList.length,
+ itemBuilder: (BuildContext context, int index) {
+ var diffDays = DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATEEND!)
+ .difference(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATESTART!))
+ .inDays;
+ return getSubordinatesLeavesTotalList.isEmpty
+ ? Utils.getNoDataWidget(context)
+ : Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SvgPicture.asset("assets/images/user.svg", width: 34, height: 34).paddingOnly(top: 4),
+ 9.width,
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ getSubordinatesLeavesTotalList[index].eMPLOYEENAME!.toText16(),
+ ItemDetailView(LocaleKeys.from.tr(), DateUtil.getFormattedDate(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATESTART!), "MMM dd yyyy")),
+ ItemDetailView(LocaleKeys.to.tr(), DateUtil.getFormattedDate(DateUtil.convertStringToDate(getSubordinatesLeavesTotalList[index].dATEEND!), "MMM dd yyyy")),
+ ItemDetailView(LocaleKeys.numberDays.tr(), diffDays.toString()),
+ ],
+ ).expanded
+ ],
+ ).objectContainerView();
+ }).expanded
+ ],
),
- DefaultButton(
- LocaleKeys.submit.tr(), () async {
- getSubordinatesLeaves();
- }).insideContainer
- ],
),
- );
+ DefaultButton(LocaleKeys.submit.tr(), () async {
+ getSubordinatesLeaves();
+ }).insideContainer
+ ],
+ ),
+ );
}
-
-
Future _selectDate(BuildContext context, DateTime selectedDate) async {
DateTime time = selectedDate;
if (!Platform.isIOS) {
diff --git a/pubspec.yaml b/pubspec.yaml
index fcd8742..ee15638 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -107,6 +107,7 @@ flutter:
- assets/images/
- assets/images/login/
- assets/images/logos/
+ - assets/images/drawer/
- assets/icons/nfc/ic_nfc.png
- assets/icons/nfc/ic_done.png