Merge branch 'master' into Fatima

faiz_marathon_signalR_critical
Fatimah Alshammari 2 years ago
commit 414cc587ea

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15.443" height="20.591" viewBox="0 0 15.443 20.591">
<path id="padlock_2_" data-name="padlock (2)" d="M16.513,7.722h-.643V5.148a5.148,5.148,0,0,0-10.3,0V7.722H4.93A1.933,1.933,0,0,0,3,9.652v9.009a1.933,1.933,0,0,0,1.93,1.93H16.513a1.933,1.933,0,0,0,1.93-1.93V9.652A1.933,1.933,0,0,0,16.513,7.722ZM7.29,5.148a3.432,3.432,0,0,1,6.864,0V7.722H7.29Zm4.29,9.2V16.3a.858.858,0,1,1-1.716,0V14.347a1.716,1.716,0,1,1,1.716,0Z" transform="translate(-3)" fill="#2e303a"/>
</svg>

After

Width:  |  Height:  |  Size: 517 B

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15.952" height="19.94" viewBox="0 0 15.952 19.94">
<g id="id" transform="translate(-37.5)">
<g id="Group_8628" data-name="Group 8628" transform="translate(37.5)">
<path id="Path_5014" data-name="Path 5014" d="M51.458,1.994H49.464V0H47.47V1.994H43.482V0H41.488V1.994H39.494A2,2,0,0,0,37.5,3.988V17.946a2,2,0,0,0,1.994,1.994H51.458a2,2,0,0,0,1.994-1.994V3.988A2,2,0,0,0,51.458,1.994Zm-9.97,11.953A4.008,4.008,0,0,1,45.364,9.97a1.994,1.994,0,1,1,.223,0,4.008,4.008,0,0,1,3.876,3.977Z" transform="translate(-37.5)" fill="#2e303a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 610 B

@ -0,0 +1,3 @@
<svg id="power" xmlns="http://www.w3.org/2000/svg" width="19.191" height="19.191" viewBox="0 0 19.191 19.191">
<path id="Path_4506" data-name="Path 4506" d="M9.6,0a9.6,9.6,0,1,0,9.6,9.6A9.607,9.607,0,0,0,9.6,0ZM9.033,3.224a.562.562,0,1,1,1.124,0v4.5a.562.562,0,0,1-1.124,0ZM9.6,15.78A6.184,6.184,0,0,1,7.121,3.929a.562.562,0,0,1,.451,1.03,5.06,5.06,0,1,0,4.047,0,.562.562,0,0,1,.451-1.03A6.184,6.184,0,0,1,9.6,15.78Z" fill="#ca3332"/>
</svg>

After

Width:  |  Height:  |  Size: 444 B

@ -0,0 +1,5 @@
<svg id="interview_3_" data-name="interview (3)" xmlns="http://www.w3.org/2000/svg" width="20.391" height="20.391" viewBox="0 0 20.391 20.391">
<path id="Path_5009" data-name="Path 5009" d="M203,0h-7.678A2.516,2.516,0,0,0,192.8,2.517V14.034a.6.6,0,0,0,.956.478l2.4-1.8H203a2.516,2.516,0,0,0,2.517-2.517V2.517A2.516,2.516,0,0,0,203,0Zm-4.437,9.513h-2.6a.6.6,0,1,1,0-1.195h2.6a.6.6,0,1,1,0,1.195Zm3.8-2.559h-6.4a.6.6,0,1,1,0-1.195h6.4a.6.6,0,1,1,0,1.195Zm0-2.56h-6.4a.6.6,0,1,1,0-1.195h6.4a.6.6,0,1,1,0,1.195Zm0,0" transform="translate(-185.122)" fill="#2e303a"/>
<path id="Path_5010" data-name="Path 5010" d="M30.074,243.812a2.824,2.824,0,1,1-2.824-2.824A2.824,2.824,0,0,1,30.074,243.812Zm0,0" transform="translate(-23.453 -231.391)" fill="#2e303a"/>
<path id="Path_5011" data-name="Path 5011" d="M3.8,382.8A3.8,3.8,0,0,0,0,386.6v.751a.6.6,0,0,0,.6.6H7a.6.6,0,0,0,.6-.6V386.6A3.8,3.8,0,0,0,3.8,382.8Zm0,0" transform="translate(0 -367.559)" fill="#2e303a"/>
</svg>

After

Width:  |  Height:  |  Size: 969 B

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15.951" height="18.149" viewBox="0 0 15.951 18.149">
<g id="user_19_" data-name="user (19)" transform="translate(-31)">
<g id="Group_7233" data-name="Group 7233" transform="translate(34.19)">
<g id="Group_7232" data-name="Group 7232">
<path id="Path_16" data-name="Path 16" d="M125.785,0a4.785,4.785,0,1,0,4.785,4.785A4.791,4.791,0,0,0,125.785,0Z" transform="translate(-121)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7235" data-name="Group 7235" transform="translate(31 10.634)">
<g id="Group_7234" data-name="Group 7234">
<path id="Path_17" data-name="Path 17" d="M44.929,302.063A6.822,6.822,0,0,0,40.039,300H37.912a6.822,6.822,0,0,0-4.89,2.063A6.974,6.974,0,0,0,31,306.983a.532.532,0,0,0,.532.532H46.419a.532.532,0,0,0,.532-.532A6.974,6.974,0,0,0,44.929,302.063Z" transform="translate(-31 -300)" fill="#2e303a"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 943 B

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16.88" height="19.43" viewBox="0 0 16.88 19.43">
<g id="interview_3_" data-name="interview (3)" transform="translate(-7.678)">
<path id="Path_5009" data-name="Path 5009" d="M206.338,0h-10.2A3.34,3.34,0,0,0,192.8,3.342V18.635a.794.794,0,0,0,1.269.635l3.187-2.39h9.081a3.34,3.34,0,0,0,3.342-3.342V3.342A3.34,3.34,0,0,0,206.338,0Zm-5.891,12.632h-3.455a.793.793,0,0,1,0-1.586h3.455a.793.793,0,0,1,0,1.586Zm5.041-3.4h-8.5a.793.793,0,0,1,0-1.586h8.5a.793.793,0,1,1,0,1.586Zm0-3.4h-8.5a.793.793,0,0,1,0-1.586h8.5a.793.793,0,1,1,0,1.586Zm0,0" transform="translate(-185.122)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 651 B

@ -0,0 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.954" height="16.078" viewBox="0 0 18.954 16.078">
<g id="group_2_" data-name="group (2)" transform="translate(0 -38.84)">
<g id="Group_7238" data-name="Group 7238" transform="translate(14.752 47.52)">
<g id="Group_7237" data-name="Group 7237" transform="translate(0 0)">
<path id="Path_23" data-name="Path 23" d="M399.96,273.32h-1.466a3.814,3.814,0,0,1,.231,1.311v5.54a1.634,1.634,0,0,1-.094.547h2.423a1.644,1.644,0,0,0,1.642-1.642v-3.02A2.739,2.739,0,0,0,399.96,273.32Z" transform="translate(-398.494 -273.32)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7240" data-name="Group 7240" transform="translate(0 47.52)">
<g id="Group_7239" data-name="Group 7239">
<path id="Path_24" data-name="Path 24" d="M3.971,274.632a3.813,3.813,0,0,1,.231-1.311H2.736A2.739,2.739,0,0,0,0,276.057v3.02a1.644,1.644,0,0,0,1.642,1.642H4.065a1.634,1.634,0,0,1-.094-.547Z" transform="translate(0 -273.321)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7242" data-name="Group 7242" transform="translate(5.065 46.095)">
<g id="Group_7241" data-name="Group 7241" transform="translate(0 0)">
<path id="Path_25" data-name="Path 25" d="M142.916,234.815h-3.351a2.739,2.739,0,0,0-2.736,2.736v5.54a.547.547,0,0,0,.547.547H145.1a.547.547,0,0,0,.547-.547v-5.54A2.739,2.739,0,0,0,142.916,234.815Z" transform="translate(-136.829 -234.815)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7244" data-name="Group 7244" transform="translate(6.186 38.84)">
<g id="Group_7243" data-name="Group 7243" transform="translate(0 0)">
<path id="Path_26" data-name="Path 26" d="M170.4,38.84a3.29,3.29,0,1,0,3.29,3.291A3.294,3.294,0,0,0,170.4,38.84Z" transform="translate(-167.114 -38.84)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7246" data-name="Group 7246" transform="translate(1.238 41.907)">
<g id="Group_7245" data-name="Group 7245" transform="translate(0 0)">
<path id="Path_27" data-name="Path 27" d="M35.9,121.689a2.46,2.46,0,1,0,2.461,2.461A2.464,2.464,0,0,0,35.9,121.689Z" transform="translate(-33.443 -121.689)" fill="#2e303a"/>
</g>
</g>
<g id="Group_7248" data-name="Group 7248" transform="translate(12.794 41.907)">
<g id="Group_7247" data-name="Group 7247" transform="translate(0 0)">
<path id="Path_28" data-name="Path 28" d="M348.068,121.689a2.461,2.461,0,1,0,2.461,2.461A2.464,2.464,0,0,0,348.068,121.689Z" transform="translate(-345.607 -121.689)" fill="#2e303a"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.572" height="18.57" viewBox="0 0 18.572 18.57">
<g id="Layer_2" data-name="Layer 2" transform="translate(-2 -2)">
<path id="Path_5012" data-name="Path 5012" d="M13.959,6a7.98,7.98,0,0,0-1.559.156A4.974,4.974,0,0,1,6.156,12.4a7.958,7.958,0,1,0,7.8-6.4Zm3.979,8.622H13.959a.663.663,0,0,1-.663-.663V9.979a.663.663,0,1,1,1.326,0V13.3h3.316a.663.663,0,1,1,0,1.326Z" transform="translate(-1.348 -1.347)" fill="#2e303a"/>
<path id="Path_5013" data-name="Path 5013" d="M10.622,6.311a4.311,4.311,0,1,0-4.311,4.311,4.311,4.311,0,0,0,4.311-4.311ZM5.648,4.653a.663.663,0,1,1,1.326,0V5.979a.663.663,0,0,1-1.326,0Zm0,3.316a.663.663,0,1,1,.663.663A.663.663,0,0,1,5.648,7.969Z" transform="translate(0 0)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 780 B

@ -0,0 +1,12 @@
<svg id="performance" xmlns="http://www.w3.org/2000/svg" width="19.793" height="19.793" viewBox="0 0 19.793 19.793">
<g id="Group_8625" data-name="Group 8625" transform="translate(0)">
<g id="Group_8624" data-name="Group 8624">
<path id="Path_5007" data-name="Path 5007" d="M19.762.425A.572.572,0,0,0,19.214,0H16.894a.58.58,0,1,0,0,1.16H18.25L15.481,4.286A17.77,17.77,0,0,1,.63,10.253a.58.58,0,1,0-.1,1.155c.542.047,1,.07,1.541.07A19.121,19.121,0,0,0,16.35,5.054l2.284-2.578V2.9a.58.58,0,0,0,1.16,0V1.152Z" transform="translate(-0.001)" fill="#2e303a"/>
</g>
</g>
<g id="Group_8627" data-name="Group 8627" transform="translate(0 5.017)">
<g id="Group_8626" data-name="Group 8626">
<path id="Path_5008" data-name="Path 5008" d="M19.213,143.389h-.619V130.352a.58.58,0,0,0-1.023-.374l-.356.423a20.057,20.057,0,0,1-1.908,1.973.579.579,0,0,0-.192.431v10.584h-1.16v-8.775a.58.58,0,0,0-.9-.481,20.468,20.468,0,0,1-2.256,1.314.579.579,0,0,0-.321.519v7.424H9.317v-6.435a.579.579,0,0,0-.775-.546,20.4,20.4,0,0,1-2.256.66.58.58,0,0,0-.449.565v5.755H4.678v-5.355a.581.581,0,0,0-.194-.433.572.572,0,0,0-.452-.143,20.217,20.217,0,0,1-2.254.13.58.58,0,0,0-.579.58v5.222H.58a.58.58,0,0,0,0,1.16H19.213a.58.58,0,0,0,0-1.16Z" transform="translate(0 -129.773)" fill="#2e303a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20.009" height="18.342" viewBox="0 0 20.009 18.342">
<g id="business-cards" transform="translate(0 -21.334)">
<g id="Group_8630" data-name="Group 8630" transform="translate(0 21.334)">
<g id="Group_8629" data-name="Group 8629" transform="translate(0 0)">
<path id="Path_5015" data-name="Path 5015" d="M1.457,203.561a.414.414,0,0,0-.417,0l-.215.125a1.678,1.678,0,0,0-.6,2.277l.668,1.168a.416.416,0,0,0,.362.21.422.422,0,0,0,.107-.014.418.418,0,0,0,.309-.4v-3A.418.418,0,0,0,1.457,203.561Z" transform="translate(0 -196.386)" fill="#2e303a"/>
<path id="Path_5016" data-name="Path 5016" d="M151.469,26.329h10.594a.417.417,0,0,0,.362-.625L160.4,22.155a1.694,1.694,0,0,0-2.264-.611l-6.873,4.006a.418.418,0,0,0,.21.778Z" transform="translate(-145.149 -21.334)" fill="#2e303a"/>
<path id="Path_5017" data-name="Path 5017" d="M79.841,170.667H65.667A1.669,1.669,0,0,0,64,172.334v9.171a1.669,1.669,0,0,0,1.667,1.667H79.841a1.669,1.669,0,0,0,1.667-1.667v-9.171A1.669,1.669,0,0,0,79.841,170.667ZM69,174.009a1.669,1.669,0,1,1-1.668,1.669A1.67,1.67,0,0,1,69,174.009Zm3.335,5.867a.822.822,0,0,1-.834.808h-5a.822.822,0,0,1-.834-.808v-.191a1.451,1.451,0,0,1,.844-1.307,5.353,5.353,0,0,1,4.981,0,1.451,1.451,0,0,1,.844,1.307ZM79.424,179h-5a.417.417,0,0,1,0-.834h5a.417.417,0,1,1,0,.834Zm0-2.5h-6.67a.417.417,0,0,1,0-.834h6.67a.417.417,0,0,1,0,.834Z" transform="translate(-61.499 -164.831)" fill="#2e303a"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -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",

@ -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": {

@ -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<GenericResponseModel?> getListMenu() async {
Future<List<ListMenu>> getListMenu() async {
String url = "${ApiConsts.erpRest}GET_MENU";
Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData;
return responseData.listMenu ?? [];
}, url, postParams);
}

@ -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),

@ -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<String,dynamic> 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<String,dynamic> 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<String,dynamic> en_US = {
"absenceStatus": "Absence Status",
"subordinateLeave": "Subordinate Leave",
"numberDays": "Number of days",
"poweredBy": "Powered By",
"cloudSolutions": "Cloud Solutions",
"profile": {
"reset_password": {
"label": "Reset Password",

@ -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';

@ -0,0 +1,7 @@
class DrawerMenuItem {
String icon;
String title;
String routeName;
DrawerMenuItem(this.icon, this.title, this.routeName);
}

@ -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<DrawerMenuItem> 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<String, String> 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<ListMenu> 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);
}
}

@ -43,6 +43,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
void initState() {
super.initState();
data = Provider.of<DashboardProviderModel>(context, listen: false);
data.fetchListMenu();
data.fetchAttendanceTracking(context);
data.fetchWorkListCounter(context);
data.fetchMissingSwipe(context);
@ -220,9 +221,11 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
],
),
).onPress(() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
}))
).onPress(
() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
},
))
.animatedSwither();
},
),
@ -240,10 +243,10 @@ class _DashboardScreenState extends State<DashboardScreen> {
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(

@ -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<AppDrawer> {
List<DrawerMenuItem> drawerMenuItemList = [];
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Drawer(
child: Column(children: <Widget>[
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<DashboardProviderModel>(context, listen: false).drawerMenuItemList;
}
return Drawer(
width: MediaQuery.of(context).size.width * 303 / 375,
child: Column(
children: <Widget>[
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);
}
}

@ -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<ProfileDetails> {
GetEmployeeSubordinatesList? getEmployeeSubordinates;
@override
void initState() {
super.initState();
@ -33,47 +31,26 @@ class _ProfileDetailsState extends State<ProfileDetails> {
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(),
],
));
}
}

@ -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<SubordinateLeave> {
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<SubordinateLeave> {
}
}
@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<DateTime> _selectDate(BuildContext context, DateTime selectedDate) async {
DateTime time = selectedDate;
if (!Platform.isIOS) {

@ -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

Loading…
Cancel
Save