diff --git a/assets/images/greeting.svg b/assets/images/greeting.svg
new file mode 100644
index 0000000..0682c60
--- /dev/null
+++ b/assets/images/greeting.svg
@@ -0,0 +1,605 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index a78c83f..c34661b 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -531,7 +531,7 @@
"noWinner": "حزين! لم يفز أحد اليوم.",
"myTeam": "فريقي",
"youCanPlayDemo": "لكن يمكنك لعب العرض",
- "group" : "مجموعة",
+ "group": "مجموعة",
"searchGroup": "مجموعة البحث",
"connectHmgWifi": "قم بتوصيل HMG WIFI",
"connectedHmgWifi": "اتصال HMG WIFI",
@@ -575,20 +575,20 @@
"versionStatus": "حالة الإصدار",
"supplierNo": "رقم المورد",
"general": "عام",
- "requesterOperatingUnit":"وحدة تشغيل مقدم الطلب",
- "prepareEmpNum":"إعداد رقم الموظف",
- "supplierInfo" : "معلومات المورد",
+ "requesterOperatingUnit": "وحدة تشغيل مقدم الطلب",
+ "prepareEmpNum": "إعداد رقم الموظف",
+ "supplierInfo": "معلومات المورد",
"supplierAcNo": "رقم حساب المورد",
"supplierAcName": "اسم حساب المورد",
- "supplierIBAN" : "رقم IBAN للمورد",
- "supplierCRNo" :"رقم السجل التجاري",
- "suppliedAcNo" : "رقم الحساب المقدم",
- "patientRefundInvoice" : "فاتورة استرداد الأموال للمريض",
- "patientNumber" : "رقم المريض",
- "patientName" : "اسم المريض",
- "invoiceDate" : "تاريخ الفاتورة",
- "refundInvoice" :"فاتورة الاسترجاع",
- "hospitalClinic" : "عيادة المستشفى",
+ "supplierIBAN": "رقم IBAN للمورد",
+ "supplierCRNo": "رقم السجل التجاري",
+ "suppliedAcNo": "رقم الحساب المقدم",
+ "patientRefundInvoice": "فاتورة استرداد الأموال للمريض",
+ "patientNumber": "رقم المريض",
+ "patientName": "اسم المريض",
+ "invoiceDate": "تاريخ الفاتورة",
+ "refundInvoice": "فاتورة الاسترجاع",
+ "hospitalClinic": "عيادة المستشفى",
"graphicalAnalysis": "التحليل الرسومي",
"itemHistoryAnalysis": "تحليل تاريخ العنصر",
"pOno": "امر شراء #",
@@ -614,23 +614,23 @@
"members": "الأعضاء",
"searchByUserName": "البحث بواسطة اسم المستخدم",
"shareScreen": "مشاركة الشاشة",
- "start":"يبدأ",
- "about":"عن",
+ "start": "يبدأ",
+ "about": "عن",
"explore": "يستكشف",
"mazaya": "مازيا",
"benefits": "فوائد",
"mazayaDesc": "اكتشف الخصومات والعروض الخاصة المتاحة للموظفين",
- "viewallofferMazaya" : "أعرض كل المزايا",
+ "viewallofferMazaya": "أعرض كل المزايا",
"buyerName": "اسم المشتري",
"buyerNumber": "رقم المشتري",
"highestBidder": "أعلى مزايد",
"remarks": "ملاحظات",
"faHeader": "تفاصيل رأس الصفحة FA",
- "bookTypeCode": "رمز نوع الكتاب",
+ "bookTypeCode": "رمز نوع الكتاب",
"categoryCode": "رمز الفئة",
"categoryGroup": "مجموعة الفئات",
- "faLINES": "تفاصيل الأصول",
- "assetNumber": "رقم الأصول",
+ "faLINES": "تفاصيل الأصول",
+ "assetNumber": "رقم الأصول",
"assetDescription": "وصف الأصول",
"barCodeNumber": "رقم الباركود",
"datePlaceInService": "تاريخ وضعه في الخدمة",
@@ -638,10 +638,11 @@
"disposedDate": "تاريخ التخلص",
"netBookValue": "القيمة الدفترية الصافية",
"purchasedPrice": "سعر الشراء",
- "usefulLife": "العمر الإنتاجي",
+ "usefulLife": "العمر الإنتاجي",
"yearsUsed": "سنوات الاستخدام",
"faRequest": "طلب التخلص من FA",
"showMore": "عرض المزيد",
"buyerDetails": "تفاصيل المشتري",
- "parkingQr": "وقوف السيارات QR"
+ "parkingQr": "وقوف السيارات QR",
+ "startNow": "ابدأ الآن"
}
\ No newline at end of file
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 5b49d24..af3251e 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -565,7 +565,7 @@
"addAtLeastOneAttachment": "Please add at least one attachment.",
"pleaseClickButtonToJoinMarathon": "Press the button below to join the Marathon.",
"youCannotJoinTheMarathon": "You cannot join the Marathon because you have exceeded the time limit.",
- "requesterOperatingUnit":"Requester Operating Unit",
+ "requesterOperatingUnit": "Requester Operating Unit",
"generate": "Generate",
"paymentRequest": "Pay Request",
"paymentDetails": "Payment Details",
@@ -591,19 +591,19 @@
"versionStatus": "Version Status",
"supplierNo": "Supplier No",
"general": "General",
- "prepareEmpNum":"Prepare Employee Num",
- "supplierInfo" : "Supplier Information",
+ "prepareEmpNum": "Prepare Employee Num",
+ "supplierInfo": "Supplier Information",
"supplierAcNo": "Supplier Account No",
- "supplierAcName":"Supplier Account Name",
- "supplierIBAN" : "Supplier IBAN",
- "supplierCRNo" : "CR Number",
- "suppliedAcNo" : "Supplied Account No.",
- "patientRefundInvoice" : "Patient Refund Invoice",
- "patientNumber" : "Patient Number",
- "patientName" : "Patient Name",
- "invoiceDate" : "Invoice Date",
- "refundInvoice" :"Refund Invoice",
- "hospitalClinic" : "Hospital Clinic",
+ "supplierAcName": "Supplier Account Name",
+ "supplierIBAN": "Supplier IBAN",
+ "supplierCRNo": "CR Number",
+ "suppliedAcNo": "Supplied Account No.",
+ "patientRefundInvoice": "Patient Refund Invoice",
+ "patientNumber": "Patient Number",
+ "patientName": "Patient Name",
+ "invoiceDate": "Invoice Date",
+ "refundInvoice": "Refund Invoice",
+ "hospitalClinic": "Hospital Clinic",
"graphicalAnalysis": "Graphical Analysis",
"itemHistoryAnalysis": "Item History Analysis",
"pOno": "P.O #",
@@ -612,23 +612,23 @@
"qtyReceived": "Qty. Received",
"bonusQty": "Bonus Qty.",
"balQty": "Bal. Qty.",
- "start":"Start",
- "about":"About",
+ "start": "Start",
+ "about": "About",
"explore": "Explore",
"mazaya": "MAZAYA",
"benefits": "Benefits",
"mazayaDesc": "Discover special Discounts and offers available to Employees",
- "viewallofferMazaya" : "View All Offers",
+ "viewallofferMazaya": "View All Offers",
"buyerName": "Buyer Name",
"buyerNumber": "Buyer Number",
"highestBidder": "Highest Bidder",
"remarks": "Remarks",
"faHeader": "FA Header Details",
- "bookTypeCode": "Book Type Code",
+ "bookTypeCode": "Book Type Code",
"categoryCode": "Category Code",
"categoryGroup": "Category Group",
- "faLINES": "Asset Details",
- "assetNumber": "Asset Number",
+ "faLINES": "Asset Details",
+ "assetNumber": "Asset Number",
"assetDescription": "Asset Description",
"barCodeNumber": "BarCode Number",
"datePlaceInService": "Date place In Service",
@@ -636,10 +636,11 @@
"disposedDate": "Disposed Date",
"netBookValue": "Net Book Value",
"purchasedPrice": "Purchased Price",
- "usefulLife": "Useful Life",
+ "usefulLife": "Useful Life",
"yearsUsed": "Years Used",
- "faRequest":"FA Disposal Request",
+ "faRequest": "FA Disposal Request",
"showMore": "Show More",
"buyerDetails": "Buyer Details",
- "parkingQr": "Parking QR"
+ "parkingQr": "Parking QR",
+ "startNow": "Start Now"
}
\ No newline at end of file
diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart
index 62bbce6..3b24423 100644
--- a/lib/generated/codegen_loader.g.dart
+++ b/lib/generated/codegen_loader.g.dart
@@ -656,7 +656,8 @@ class CodegenLoader extends AssetLoader{
"faRequest": "طلب التخلص من FA",
"showMore": "عرض المزيد",
"buyerDetails": "تفاصيل المشتري",
- "parkingQr": "وقوف السيارات QR"
+ "parkingQr": "وقوف السيارات QR",
+ "startNow": "ابدأ الآن"
};
static const Map _en_US = {
"mohemm": "Mohemm",
@@ -1300,7 +1301,8 @@ static const Map _en_US = {
"faRequest": "FA Disposal Request",
"showMore": "Show More",
"buyerDetails": "Buyer Details",
- "parkingQr": "Parking QR"
+ "parkingQr": "Parking QR",
+ "startNow": "Start Now"
};
static const Map> mapLocales = {"ar_SA": _ar_SA, "en_US": _en_US};
}
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index 683c8c4..9cf563a 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -629,5 +629,6 @@ abstract class LocaleKeys {
static const showMore = 'showMore';
static const buyerDetails = 'buyerDetails';
static const parkingQr = 'parkingQr';
+ static const startNow = 'startNow';
}
diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart
index 09c347e..169eb28 100644
--- a/lib/provider/dashboard_provider_model.dart
+++ b/lib/provider/dashboard_provider_model.dart
@@ -68,6 +68,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
bool isOffersLoading = true;
List getOffersList = [];
+ bool isGreetingCardsLoading = true;
bool isDisplayEidGreetings = false;
List? greetingCardsList;
@@ -119,6 +120,8 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
getMenuEntriesList = null;
isOffersLoading = true;
getOffersList = [];
+ isGreetingCardsLoading = true;
+ isDisplayEidGreetings = false;
drawerMenuItemList = [
DrawerMenuItem("assets/images/drawer/my_profile.svg", LocaleKeys.myProfile.tr(), AppRoutes.profile),
@@ -312,22 +315,23 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
void fetchGreetingCards() async {
+ isGreetingCardsLoading = true;
+ notifyListeners();
try {
GetGreetingCardsModelResponse? response = await DashboardApiClient().getGreetingCards();
greetingCardsList = response?.getGreetingCardsModelResponse ?? [];
-
- // Check if there are any active greeting cards
if (greetingCardsList != null && greetingCardsList!.isNotEmpty) {
isDisplayEidGreetings = greetingCardsList!.any((card) => card.isActive == true);
} else {
isDisplayEidGreetings = false;
}
-
+ isGreetingCardsLoading = false;
notifyListeners();
} catch (ex) {
logger.wtf(ex);
isDisplayEidGreetings = false;
greetingCardsList = [];
+ isGreetingCardsLoading = false;
notifyListeners();
}
}
diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart
index aca7aba..e067666 100644
--- a/lib/ui/landing/dashboard_screen.dart
+++ b/lib/ui/landing/dashboard_screen.dart
@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:io';
import 'dart:ui' as ui;
-
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
@@ -254,716 +253,670 @@ class _DashboardScreenState extends State with WidgetsBindingOb
child: Scaffold(
key: _scaffoldState,
body: Column(
- children: [
- Row(
- children: [
- Builder(
- builder: (BuildContext context) {
- return Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- Image.memory(
- Utils.dataFromBase64String(AppState().memberInformationList!.eMPLOYEEIMAGE ?? ""),
- errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) {
- return SvgPicture.asset("assets/images/user.svg", height: 34, width: 34);
- },
- width: 34,
- height: 34,
- fit: BoxFit.cover,
- ).circle(50),
- // CircularAvatar(
- // width: 34,
- // height: 34,
- // url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png",
- // ),
- 8.width,
- SvgPicture.asset("assets/images/side_nav.svg"),
- ],
- ).onPress(() {
- _scaffoldState.currentState!.openDrawer();
- });
- },
- ),
- Image
- .asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28)
- .expanded,
- SvgPicture.asset("assets/images/announcements.svg", matchTextDirection: true).onPress(() async {
- await Navigator.pushNamed(context, AppRoutes.announcements);
- }),
- ],
- ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
- Expanded(
- child: SmartRefresher(
- enablePullDown: true,
- enablePullUp: false,
- header: const MaterialClassicHeader(color: MyColors.gradiantEndColor),
- controller: _refreshController,
- onRefresh: () {
- _onRefresh(false);
- },
- child: SingleChildScrollView(
- child: Column(
- children: [
- Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- LocaleKeys.welcomeBack.tr().toText14(color: MyColors.grey77Color),
- (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24(isBold: true),
- 16.height,
- Row(
- children: [
- Expanded(
- child: AspectRatio(
- aspectRatio: 159 / 159,
- child: Consumer(
- builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
- return (model.isAttendanceTrackingLoading
- ? GetAttendanceTrackingShimmer()
- : Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(15),
- gradient: const LinearGradient(
- transform: GradientRotation(.46),
- begin: Alignment.topRight,
- end: Alignment.bottomLeft,
- colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor],
- ),
- ),
- child: Stack(
- alignment: Alignment.center,
- children: [
- if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
- Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Expanded(
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
- if (model.isTimeRemainingInSeconds == 0) DateTime.now().toString().split(" ")[0].toText12(color: Colors.white),
- if (model.isTimeRemainingInSeconds != 0)
- Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- 9.height,
- Directionality(
- textDirection: ui.TextDirection.ltr,
- child: CountdownTimer(
- endTime: model.endTime,
- onEnd: null,
- endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
- textStyle: const TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
- ),
- ),
- LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
- 9.height,
- ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(20)),
- child: LinearProgressIndicator(
- value: model.progress,
- minHeight: 8,
- valueColor: const AlwaysStoppedAnimation(Colors.white),
- backgroundColor: const Color(0xff196D73),
- ),
- ),
- ],
- ),
- ],
- ).paddingOnly(top: 12, right: 15, left: 12),
- ),
- Row(
- children: [
- Expanded(
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- LocaleKeys.checkIn.tr().toText12(color: Colors.white),
- (model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn).toString().toText14(
- color: Colors.white,
- isBold: true,
- ),
- 4.height,
- ],
- ).paddingOnly(left: 12, right: 12),
- ),
- Container(
- margin: EdgeInsets.only(top: AppState().isArabic(context) ? 6 : 0),
- width: 45,
- height: 45,
- padding: const EdgeInsets.only(left: 10, right: 10),
- decoration: BoxDecoration(
- color: const Color(0xff259EA4),
- borderRadius: BorderRadius.only(
- bottomRight: AppState().isArabic(context) ? const Radius.circular(0) : const Radius.circular(15),
- bottomLeft: AppState().isArabic(context) ? const Radius.circular(15) : const Radius.circular(0),
- ),
- ),
- child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/biometrics.svg" : "assets/images/biometrics.svg"),
- ).onPress(() {
- showMyBottomSheet(context, callBackFunc: () {}, child: MarkAttendanceWidget(model, isFromDashboard: true));
- }),
- ],
- ),
- ],
- ),
- ],
- ),
- ).onPress(() {
- Navigator.pushNamed(context, AppRoutes.todayAttendance);
- }))
- .animatedSwither();
- },
- ),
- ),
- ),
- 9.width,
- Expanded(child: MenusWidget()),
- ],
- ),
- ],
- ).paddingOnly(left: 21, right: 21, top: 7, bottom: 21),
- if (data.isDisplayEidGreetings) ...[
- Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Directionality(
- textDirection: AppState().isArabic(context) ? ui.TextDirection.rtl : ui.TextDirection.ltr,
- child: Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- gradient: const LinearGradient(colors: [Color(0xFFE7E7E7), Color(0xFFE7E7E7)], begin: Alignment.centerLeft, end: Alignment.centerRight),
- ),
- child: Padding(
- padding: const EdgeInsets.all(3.0),
- child: Container(
- height: 120,
- decoration: BoxDecoration(color: const Color(0xFFFAF4E7),borderRadius: BorderRadius.circular(17), image: DecorationImage(image: NetworkImage(AppState().isArabic(context) ? data.greetingCardsList!.first.backgroundImageUrlAr ?? "" : data.greetingCardsList!.first.backgroundImageUrlEn ?? ""), fit: BoxFit.cover)),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- // Expanded(
- // flex: 4,
- // child: Column(
- // crossAxisAlignment: CrossAxisAlignment.start,
- // mainAxisAlignment: MainAxisAlignment.start,
- // children: [
- // Row(
- // children: [
- // Expanded(
- // flex: 2,
- // child: RichText(
- // text:
- // AppState().isArabic(context)
- // ? TextSpan(
- // children: [
- // TextSpan(
- // text: 'اطلع على مميزات',
- // style: TextStyle(
- // fontSize: 16,
- // letterSpacing: -0.2,
- // fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
- // fontWeight: FontWeight.w700,
- // height: 24 / 16,
- // color: const Color(0xFF5D5E5E),
- // ),
- // ),
- // TextSpan(
- // text: ' مزايا',
- // style: TextStyle(
- // fontSize: 16,
- // fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
- // fontWeight: FontWeight.w700,
- // letterSpacing: -0.2,
- // height: 24 / 16,
- // color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
- // ),
- // ),
- // ],
- // )
- // : TextSpan(
- // children: [
- // TextSpan(
- // text: LocaleKeys.explore.tr() + ' ',
- // style: const TextStyle(
- // fontSize: 16,
- // letterSpacing: -0.2,
- // fontFamily: 'Poppins',
- // fontWeight: FontWeight.w700,
- // height: 24 / 16,
- // color: Color(0xFF5D5E5E),
- // ),
- // ),
- // TextSpan(
- // text: LocaleKeys.mazaya.tr(),
- // style: const TextStyle(
- // fontSize: 16,
- // fontWeight: FontWeight.w700,
- // fontFamily: 'Poppins',
- // letterSpacing: -0.2,
- // height: 24 / 16,
- // color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
- // ),
- // ),
- // TextSpan(
- // text: ' ' + LocaleKeys.benefits.tr(),
- // style: const TextStyle(
- // fontSize: 16,
- // letterSpacing: -0.2,
- // fontFamily: 'Poppins',
- // fontWeight: FontWeight.w700,
- // height: 24 / 16,
- // color: Color(0xFF5D5E5E),
- // ),
- // ),
- // ],
- // ),
- // ),
- // ),
- // const Expanded(flex: 1, child: SizedBox()),
- // ],
- // ),
- // const SizedBox(height: 8),
- // LocaleKeys.mazayaDesc.tr().toText11(color: const Color(0xFF5D5E5E)),
- // ],
- // ),
- // ),
- // Expanded(
- // flex: 2,
- // child: Column(
- // crossAxisAlignment: CrossAxisAlignment.end,
- // mainAxisAlignment: MainAxisAlignment.end,
- // children: [
- // SvgPicture.asset("assets/icons/mazaya_brand.svg", width: 90, height: 47),
- // const SizedBox(height: 28),
- // LocaleKeys.viewallofferMazaya.tr().toText12(isUnderLine: true, color: const Color(0xFF3B3D4A)).onPress(() {
- // Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
- // }),
- // ],
- // ),
- // ),
- ],
- ).paddingOnly(left: 21, right: 21, top: 14, bottom: 14),
- ),
- ),
- ).paddingOnly(left: 21, right: 21, top: 0, bottom: 21),
- ),
- ],
- ),
- ],
- eventActivityWidget(context),
- if (isDisplayMazaya) ...[
- Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Directionality(
- textDirection: AppState().isArabic(context) ? ui.TextDirection.rtl : ui.TextDirection.ltr,
- child: Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- gradient: const LinearGradient(colors: [Color(0xFF91C481), Color(0xFF7CCED7)], begin: Alignment.centerLeft, end: Alignment.centerRight),
- ),
- child: Padding(
- padding: const EdgeInsets.all(3.0), // This creates the border width
- child: Container(
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: BorderRadius.circular(17), // Slightly less than outer radius
- ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Expanded(
- flex: 4,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- Row(
- children: [
- Expanded(
- flex: 2,
- child: RichText(
- text:
- AppState().isArabic(context)
- ? TextSpan(
- children: [
- TextSpan(
- text: 'اطلع على مميزات',
- style: TextStyle(
- fontSize: 16,
- letterSpacing: -0.2,
- fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
- fontWeight: FontWeight.w700,
- height: 24 / 16,
- color: const Color(0xFF5D5E5E),
- ),
- ),
- TextSpan(
- text: ' مزايا',
- style: TextStyle(
- fontSize: 16,
- fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
- fontWeight: FontWeight.w700,
- letterSpacing: -0.2,
- height: 24 / 16,
- color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
- ),
- ),
- ],
- )
- : TextSpan(
- children: [
- TextSpan(
- text: LocaleKeys.explore.tr() + ' ',
- style: const TextStyle(
- fontSize: 16,
- letterSpacing: -0.2,
- fontFamily: 'Poppins',
- fontWeight: FontWeight.w700,
- height: 24 / 16,
- color: Color(0xFF5D5E5E),
- ),
- ),
- TextSpan(
- text: LocaleKeys.mazaya.tr(),
- style: const TextStyle(
- fontSize: 16,
- fontWeight: FontWeight.w700,
- fontFamily: 'Poppins',
- letterSpacing: -0.2,
- height: 24 / 16,
- color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
- ),
- ),
- TextSpan(
- text: ' ' + LocaleKeys.benefits.tr(),
- style: const TextStyle(
- fontSize: 16,
- letterSpacing: -0.2,
- fontFamily: 'Poppins',
- fontWeight: FontWeight.w700,
- height: 24 / 16,
- color: Color(0xFF5D5E5E),
- ),
- ),
- ],
- ),
- ),
- ),
- const Expanded(flex: 1, child: SizedBox()),
- ],
- ),
- const SizedBox(height: 8),
- LocaleKeys.mazayaDesc.tr().toText11(color: const Color(0xFF5D5E5E)),
- ],
- ),
- ),
- Expanded(
- flex: 2,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.end,
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- SvgPicture.asset("assets/icons/mazaya_brand.svg", width: 90, height: 47),
- const SizedBox(height: 28),
- LocaleKeys.viewallofferMazaya.tr().toText12(isUnderLine: true, color: const Color(0xFF3B3D4A)).onPress(() {
- Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
- }),
- ],
- ),
- ),
- ],
- ).paddingOnly(left: 21, right: 21, top: 14, bottom: 14),
- ),
- ),
- ).paddingOnly(left: 21, right: 21, top: 0, bottom: 21),
- ),
- ],
- ),
- ],
+ children: [
+ Row(
+ children: [
+ Builder(
+ builder: (BuildContext context) {
+ return Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Image.memory(
+ Utils.dataFromBase64String(AppState().memberInformationList!.eMPLOYEEIMAGE ?? ""),
+ errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) {
+ return SvgPicture.asset("assets/images/user.svg", height: 34, width: 34);
+ },
+ width: 34,
+ height: 34,
+ fit: BoxFit.cover,
+ ).circle(50),
+ // CircularAvatar(
+ // width: 34,
+ // height: 34,
+ // url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png",
+ // ),
+ 8.width,
+ SvgPicture.asset("assets/images/side_nav.svg"),
+ ],
+ ).onPress(() {
+ _scaffoldState.currentState!.openDrawer();
+ });
+ },
+ ),
+ Image.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28).expanded,
+ SvgPicture.asset("assets/images/announcements.svg", matchTextDirection: true).onPress(() async {
+ await Navigator.pushNamed(context, AppRoutes.announcements);
+ }),
+ ],
+ ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
+ Expanded(
+ child: SmartRefresher(
+ enablePullDown: true,
+ enablePullUp: false,
+ header: const MaterialClassicHeader(color: MyColors.gradiantEndColor),
+ controller: _refreshController,
+ onRefresh: () {
+ _onRefresh(false);
+ },
+ child: SingleChildScrollView(
+ child: Column(
+ children: [
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ LocaleKeys.welcomeBack.tr().toText14(color: MyColors.grey77Color),
+ (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24(isBold: true),
+ 16.height,
+ Row(
+ children: [
+ Expanded(
+ child: AspectRatio(
+ aspectRatio: 159 / 159,
+ child: Consumer(
+ builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
+ return (model.isAttendanceTrackingLoading
+ ? GetAttendanceTrackingShimmer()
+ : Container(
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(15),
+ gradient: const LinearGradient(
+ transform: GradientRotation(.46),
+ begin: Alignment.topRight,
+ end: Alignment.bottomLeft,
+ colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor],
+ ),
+ ),
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Expanded(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
+ if (model.isTimeRemainingInSeconds == 0) DateTime.now().toString().split(" ")[0].toText12(color: Colors.white),
+ if (model.isTimeRemainingInSeconds != 0)
+ Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ 9.height,
+ Directionality(
+ textDirection: ui.TextDirection.ltr,
+ child: CountdownTimer(
+ endTime: model.endTime,
+ onEnd: null,
+ endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
+ textStyle: const TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
+ ),
+ ),
+ LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
+ 9.height,
+ ClipRRect(
+ borderRadius: const BorderRadius.all(Radius.circular(20)),
+ child: LinearProgressIndicator(
+ value: model.progress,
+ minHeight: 8,
+ valueColor: const AlwaysStoppedAnimation(Colors.white),
+ backgroundColor: const Color(0xff196D73),
+ ),
+ ),
+ ],
+ ),
+ ],
+ ).paddingOnly(top: 12, right: 15, left: 12),
+ ),
+ Row(
+ children: [
+ Expanded(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ LocaleKeys.checkIn.tr().toText12(color: Colors.white),
+ (model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn).toString().toText14(
+ color: Colors.white,
+ isBold: true,
+ ),
+ 4.height,
+ ],
+ ).paddingOnly(left: 12, right: 12),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: AppState().isArabic(context) ? 6 : 0),
+ width: 45,
+ height: 45,
+ padding: const EdgeInsets.only(left: 10, right: 10),
+ decoration: BoxDecoration(
+ color: const Color(0xff259EA4),
+ borderRadius: BorderRadius.only(
+ bottomRight: AppState().isArabic(context) ? const Radius.circular(0) : const Radius.circular(15),
+ bottomLeft: AppState().isArabic(context) ? const Radius.circular(15) : const Radius.circular(0),
+ ),
+ ),
+ child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/biometrics.svg" : "assets/images/biometrics.svg"),
+ ).onPress(() {
+ showMyBottomSheet(context, callBackFunc: () {}, child: MarkAttendanceWidget(model, isFromDashboard: true));
+ }),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ ).onPress(() {
+ Navigator.pushNamed(context, AppRoutes.todayAttendance);
+ }))
+ .animatedSwither();
+ },
+ ),
+ ),
+ ),
+ 9.width,
+ Expanded(child: MenusWidget()),
+ ],
+ ),
+ ],
+ ).paddingOnly(left: 21, right: 21, top: 7, bottom: 21),
+ Consumer(
+ builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
+ if (model.isGreetingCardsLoading) {
+ return const GreetingCardShimmer();
+ } else if (model.isDisplayEidGreetings) {
+ return Column(
+ children: [
+ Directionality(
+ textDirection: AppState().isArabic(context) ? ui.TextDirection.rtl : ui.TextDirection.ltr,
+ child: Container(
+ height: 100,
+ decoration: BoxDecoration(
+ color: const Color(0xFFFAF4E7),
+ border: Border.all(width: 2, color: const Color(0xFFE7E7E7)),
+ borderRadius: BorderRadius.circular(20),
+ image: const DecorationImage(
+ image: NetworkImage(
+ "https://dummyimage.com/1200X600/faf4e7/faf4e7.jpg&text=0",
+ // AppState().isArabic(context) ? model.greetingCardsList!.first.backgroundImageUrlAr ?? "" : model.greetingCardsList!.first.backgroundImageUrlEn ?? "",
+ ),
+ fit: BoxFit.cover,
+ ),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SvgPicture.asset("assets/images/greeting.svg", width: 65, height: 81),
+ const SizedBox(width: 10),
+ Row(
+ children: [
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Row(
+ children: [
+ Text(
+ AppState().isArabic(context) ? model.greetingCardsList!.first.descriptionAr ?? '' : model.greetingCardsList!.first.descriptionEn ?? '',
+ style: TextStyle(
+ fontSize: AppState().isArabic(context) ? 18 : 16,
+ letterSpacing: -0.2,
+ fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
+ fontWeight: FontWeight.w700,
+ height: 24 / 16,
+ color: const Color(0xFF3B3E4F),
+ ),
+ ),
+ ],
+ ),
+ Row(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Text(
+ AppState().isArabic(context) ? model.greetingCardsList!.first.titleAr ?? '' : model.greetingCardsList!.first.titleEn ?? '',
+ style: TextStyle(
+ fontSize: AppState().isArabic(context) ? 18 : 16,
+ letterSpacing: -0.2,
+ fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
+ fontWeight: FontWeight.w700,
+ height: 24 / 16,
+ color: const Color(0xFF3B3E4F),
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ).paddingOnly(top: 10, bottom: 10).expanded,
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ LocaleKeys.startNow.tr().toText12(isUnderLine: true, color: const Color(0xFF3B3D4A)).onPress(() {
+ Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
+ }),
+ ],
+ ),
+ ],
+ ).paddingOnly(left: 8, right: 8, top: 6, bottom: 12),
+ ).paddingOnly(left: 21, right: 21, top: 14, bottom: 14),
+ ),
+ ],
+ );
+ } else {
+ return const SizedBox();
+ }
+ },
+ ),
- Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisSize: MainAxisSize.min,
- children: [
- LocaleKeys.offers.tr().toText12(),
- Row(
- children: [
- LocaleKeys.discounts.tr().toText24(isBold: true),
- 6.width,
- Container(
- padding: const EdgeInsets.only(left: 8, right: 8),
- decoration: BoxDecoration(color: MyColors.yellowColor, borderRadius: BorderRadius.circular(10)),
- child: LocaleKeys.newString.tr().toText10(isBold: true),
- ),
- ],
- ),
- ],
- ),
- ),
- LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true).onPress(() {
- Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
- }),
- ],
- ).paddingOnly(left: 21, right: 21),
- Consumer(
- builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
- return SizedBox(
- height: 103 + 33,
- child: ListView.separated(
- shrinkWrap: true,
- physics: const BouncingScrollPhysics(),
- padding: const EdgeInsets.only(left: 21, right: 21, top: 13),
- scrollDirection: Axis.horizontal,
- itemBuilder: (BuildContext cxt, int index) {
- return model.isOffersLoading
- ? const OffersShimmerWidget()
- : InkWell(
- onTap: () {
- navigateToDetails(data.getOffersList[index]);
- },
- child: SizedBox(
- width: 73,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Container(
- width: 73,
- height: 73,
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: const BorderRadius.all(Radius.circular(100)),
- border: Border.all(color: MyColors.lightGreyE3Color, width: 1),
- ),
- child: ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(50)),
- child: Hero(
- tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!,
- transitionOnUserGestures: true,
- child: Image.network(data.getOffersList[index].logo ?? "", fit: BoxFit.contain),
- ),
- ),
- ),
- 4.height,
- Expanded(
- child:
- AppState().isArabic(context)
- ? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1)
- : data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1),
- ),
- ],
- ),
- ),
- );
- },
- separatorBuilder: (BuildContext cxt, int index) => 8.width,
- itemCount: 9,
- ),
- );
- },
- ),
- ],
- ),
+ eventActivityWidget(context),
+ if (isDisplayMazaya) ...[
+ Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Directionality(
+ textDirection: AppState().isArabic(context) ? ui.TextDirection.rtl : ui.TextDirection.ltr,
+ child: Container(
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(20),
+ gradient: const LinearGradient(colors: [Color(0xFF91C481), Color(0xFF7CCED7)], begin: Alignment.centerLeft, end: Alignment.centerRight),
+ ),
+ child: Padding(
+ padding: const EdgeInsets.all(3.0), // This creates the border width
+ child: Container(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(17), // Slightly less than outer radius
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Expanded(
+ flex: 4,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Row(
+ children: [
+ Expanded(
+ flex: 2,
+ child: RichText(
+ text:
+ AppState().isArabic(context)
+ ? TextSpan(
+ children: [
+ TextSpan(
+ text: 'اطلع على مميزات',
+ style: TextStyle(
+ fontSize: 16,
+ letterSpacing: -0.2,
+ fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
+ fontWeight: FontWeight.w700,
+ height: 24 / 16,
+ color: const Color(0xFF5D5E5E),
+ ),
+ ),
+ TextSpan(
+ text: ' مزايا',
+ style: TextStyle(
+ fontSize: 16,
+ fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
+ fontWeight: FontWeight.w700,
+ letterSpacing: -0.2,
+ height: 24 / 16,
+ color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
+ ),
+ ),
+ ],
+ )
+ : TextSpan(
+ children: [
+ TextSpan(
+ text: LocaleKeys.explore.tr() + ' ',
+ style: const TextStyle(
+ fontSize: 16,
+ letterSpacing: -0.2,
+ fontFamily: 'Poppins',
+ fontWeight: FontWeight.w700,
+ height: 24 / 16,
+ color: Color(0xFF5D5E5E),
+ ),
+ ),
+ TextSpan(
+ text: LocaleKeys.mazaya.tr(),
+ style: const TextStyle(
+ fontSize: 16,
+ fontWeight: FontWeight.w700,
+ fontFamily: 'Poppins',
+ letterSpacing: -0.2,
+ height: 24 / 16,
+ color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
+ ),
+ ),
+ TextSpan(
+ text: ' ' + LocaleKeys.benefits.tr(),
+ style: const TextStyle(
+ fontSize: 16,
+ letterSpacing: -0.2,
+ fontFamily: 'Poppins',
+ fontWeight: FontWeight.w700,
+ height: 24 / 16,
+ color: Color(0xFF5D5E5E),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ const Expanded(flex: 1, child: SizedBox()),
+ ],
+ ),
+ const SizedBox(height: 8),
+ LocaleKeys.mazayaDesc.tr().toText11(color: const Color(0xFF5D5E5E)),
+ ],
+ ),
+ ),
+ Expanded(
+ flex: 2,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ SvgPicture.asset("assets/icons/mazaya_brand.svg", width: 90, height: 47),
+ const SizedBox(height: 28),
+ LocaleKeys.viewallofferMazaya.tr().toText12(isUnderLine: true, color: const Color(0xFF3B3D4A)).onPress(() {
+ Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
+ }),
+ ],
+ ),
+ ),
+ ],
+ ).paddingOnly(left: 21, right: 21, top: 14, bottom: 14),
+ ),
+ ),
+ ).paddingOnly(left: 21, right: 21, top: 0, bottom: 21),
+ ),
+ ],
+ ),
+ ],
- Container(
- width: double.infinity,
- padding: const EdgeInsets.only(top: 31),
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
- border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
- ),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- ServicesWidget(),
- context.watch().isLoading ? const MarathonBannerShimmer().paddingAll(20) : const MarathonBanner().paddingOnly(left: 21, right: 21, bottom: 8, top: 8),
- // context.watch().isTutorialLoading
- // ? const MarathonBannerShimmer().paddingAll(20)
- // : Container(
- // padding: EdgeInsets.only(bottom: 12, top: 12),
- // margin: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 8),
- // width: double.infinity,
- // alignment: Alignment.center,
- // decoration: BoxDecoration(
- // color: MyColors.backgroundBlackColor,
- // borderRadius: BorderRadius.circular(20),
- // border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
- // ),
- // child: Column(
- // crossAxisAlignment: CrossAxisAlignment.start,
- // mainAxisSize: MainAxisSize.min,
- // children: [
- // Text(
- // "Tutorial:",
- // style: TextStyle(
- // fontSize: 11,
- // fontStyle: FontStyle.italic,
- // fontWeight: FontWeight.w600,
- // color: MyColors.white.withOpacity(0.83),
- // letterSpacing: -0.4,
- // ),
- // ),
- // Text(
- // context.read().tutorial?.tutorialName ?? "",
- // overflow: TextOverflow.ellipsis,
- // style: TextStyle(
- // fontStyle: FontStyle.italic,
- // fontSize: 19,
- // fontWeight: FontWeight.bold,
- // color: MyColors.white,
- // height: 32 / 22,
- // ),
- // ),
- // ],
- // ),
- // ).onPress(() {
- // checkERMChannel();
- // // Navigator.pushNamed(context, AppRoutes.marathonTutorialScreen);
- // }),
- ],
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- ],
- ),
- drawer: AppDrawer(onLanguageChange: _onRefresh),
- bottomNavigationBar: SizedBox(
- height: Platform.isAndroid ? 70 : 100,
- child: BottomNavigationBar(
- items: [
- BottomNavigationBarItem(
- icon: SvgPicture.asset("assets/icons/home.svg", color: currentIndex == 0 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
- label: LocaleKeys.home.tr(),
- ),
- BottomNavigationBarItem(
- icon: SvgPicture.asset("assets/icons/create_req.svg", color: currentIndex == 1 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
- label: LocaleKeys.mowadhafhiRequest.tr(),
- ),
- BottomNavigationBarItem(
- icon: Stack(
- alignment: Alignment.centerLeft,
- children: [
- SvgPicture.asset("assets/icons/work_list.svg", color: currentIndex == 2 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
- Consumer(
- builder: (BuildContext cxt, DashboardProviderModel data, Widget? child) {
- if (data.workListCounter == 0) {
- return const SizedBox();
- }
- return Positioned(
- right: 0,
- top: 0,
- child: Container(
- padding: const EdgeInsets.only(left: 4, right: 4),
- alignment: Alignment.center,
- decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)),
- child: data.workListCounter.toString().toText10(color: Colors.white),
- ),
- );
- },
- ),
- ],
- ),
- label: LocaleKeys.workList.tr(),
- ),
- BottomNavigationBarItem(
- icon: SvgPicture.asset("assets/icons/item_for_sale.svg", color: currentIndex == 3 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
- label: LocaleKeys.itemsForSale.tr(),
- ),
- BottomNavigationBarItem(
- icon: Stack(
- alignment: Alignment.centerLeft,
- children: [
- SvgPicture.asset(
- "assets/icons/chat/chat.svg",
- color:
- !checkIfPrivilegedForChat()
- ? MyColors.lightGreyE3Color
- : currentIndex == 4
- ? MyColors.grey3AColor
- : cProvider.disbaleChatForThisUser
- ? MyColors.lightGreyE3Color
- : MyColors.grey98Color,
- ).paddingAll(4),
- Consumer(
- builder: (BuildContext cxt, ChatProviderModel data, Widget? child) {
- return !checkIfPrivilegedForChat()
- ? const SizedBox()
- : Positioned(
- right: 0,
- top: 0,
- child: Container(
- padding: const EdgeInsets.only(left: 4, right: 4),
- alignment: Alignment.center,
- decoration: BoxDecoration(color: cProvider.disbaleChatForThisUser ? MyColors.pinkDarkColor : MyColors.redColor, borderRadius: BorderRadius.circular(17)),
- child: data.chatUConvCounter.toString().toText10(color: Colors.white),
- ),
- );
- },
- ),
- ],
- ),
- label: LocaleKeys.chat.tr(),
- ),
- ],
- currentIndex: currentIndex,
- selectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey3AColor, fontWeight: FontWeight.w600),
- unselectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey98Color, fontWeight: FontWeight.w600),
- type: BottomNavigationBarType.fixed,
- selectedItemColor: MyColors.grey3AColor,
- backgroundColor: MyColors.backgroundColor,
- selectedIconTheme: const IconThemeData(color: MyColors.grey3AColor, size: 28),
- unselectedIconTheme: const IconThemeData(color: MyColors.grey98Color, size: 28),
- onTap: (int index) {
- if (index == 1) {
- Navigator.pushNamed(context, AppRoutes.mowadhafhi);
- } else if (index == 2) {
- Navigator.pushNamed(context, AppRoutes.workList);
- } else if (index == 3) {
- Navigator.pushNamed(context, AppRoutes.itemsForSale);
- } else if (index == 4) {
- if (!cProvider.disbaleChatForThisUser && checkIfPrivilegedForChat()) {
- Navigator.pushNamed(context, AppRoutes.chat);
- }
- }
- },
- ),
- ),
- ),
+ Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ LocaleKeys.offers.tr().toText12(),
+ Row(
+ children: [
+ LocaleKeys.discounts.tr().toText24(isBold: true),
+ 6.width,
+ Container(
+ padding: const EdgeInsets.only(left: 8, right: 8),
+ decoration: BoxDecoration(color: MyColors.yellowColor, borderRadius: BorderRadius.circular(10)),
+ child: LocaleKeys.newString.tr().toText10(isBold: true),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true).onPress(() {
+ Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
+ }),
+ ],
+ ).paddingOnly(left: 21, right: 21),
+ Consumer(
+ builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
+ return SizedBox(
+ height: 103 + 33,
+ child: ListView.separated(
+ shrinkWrap: true,
+ physics: const BouncingScrollPhysics(),
+ padding: const EdgeInsets.only(left: 21, right: 21, top: 13),
+ scrollDirection: Axis.horizontal,
+ itemBuilder: (BuildContext cxt, int index) {
+ return model.isOffersLoading
+ ? const OffersShimmerWidget()
+ : InkWell(
+ onTap: () {
+ navigateToDetails(data.getOffersList[index]);
+ },
+ child: SizedBox(
+ width: 73,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Container(
+ width: 73,
+ height: 73,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: const BorderRadius.all(Radius.circular(100)),
+ border: Border.all(color: MyColors.lightGreyE3Color, width: 1),
+ ),
+ child: ClipRRect(
+ borderRadius: const BorderRadius.all(Radius.circular(50)),
+ child: Hero(
+ tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!,
+ transitionOnUserGestures: true,
+ child: Image.network(data.getOffersList[index].logo ?? "", fit: BoxFit.contain),
+ ),
+ ),
+ ),
+ 4.height,
+ Expanded(
+ child:
+ AppState().isArabic(context)
+ ? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1)
+ : data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1),
+ ),
+ ],
+ ),
+ ),
+ );
+ },
+ separatorBuilder: (BuildContext cxt, int index) => 8.width,
+ itemCount: 9,
+ ),
+ );
+ },
+ ),
+ ],
+ ),
+
+ Container(
+ width: double.infinity,
+ padding: const EdgeInsets.only(top: 31),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
+ border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
+ ),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ ServicesWidget(),
+ context.watch().isLoading ? const MarathonBannerShimmer().paddingAll(20) : const MarathonBanner().paddingOnly(left: 21, right: 21, bottom: 8, top: 8),
+ // context.watch().isTutorialLoading
+ // ? const MarathonBannerShimmer().paddingAll(20)
+ // : Container(
+ // padding: EdgeInsets.only(bottom: 12, top: 12),
+ // margin: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 8),
+ // width: double.infinity,
+ // alignment: Alignment.center,
+ // decoration: BoxDecoration(
+ // color: MyColors.backgroundBlackColor,
+ // borderRadius: BorderRadius.circular(20),
+ // border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
+ // ),
+ // child: Column(
+ // crossAxisAlignment: CrossAxisAlignment.start,
+ // mainAxisSize: MainAxisSize.min,
+ // children: [
+ // Text(
+ // "Tutorial:",
+ // style: TextStyle(
+ // fontSize: 11,
+ // fontStyle: FontStyle.italic,
+ // fontWeight: FontWeight.w600,
+ // color: MyColors.white.withOpacity(0.83),
+ // letterSpacing: -0.4,
+ // ),
+ // ),
+ // Text(
+ // context.read().tutorial?.tutorialName ?? "",
+ // overflow: TextOverflow.ellipsis,
+ // style: TextStyle(
+ // fontStyle: FontStyle.italic,
+ // fontSize: 19,
+ // fontWeight: FontWeight.bold,
+ // color: MyColors.white,
+ // height: 32 / 22,
+ // ),
+ // ),
+ // ],
+ // ),
+ // ).onPress(() {
+ // checkERMChannel();
+ // // Navigator.pushNamed(context, AppRoutes.marathonTutorialScreen);
+ // }),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ drawer: AppDrawer(onLanguageChange: _onRefresh),
+ bottomNavigationBar: SizedBox(
+ height: Platform.isAndroid ? 70 : 100,
+ child: BottomNavigationBar(
+ items: [
+ BottomNavigationBarItem(
+ icon: SvgPicture.asset("assets/icons/home.svg", color: currentIndex == 0 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
+ label: LocaleKeys.home.tr(),
+ ),
+ BottomNavigationBarItem(
+ icon: SvgPicture.asset("assets/icons/create_req.svg", color: currentIndex == 1 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
+ label: LocaleKeys.mowadhafhiRequest.tr(),
+ ),
+ BottomNavigationBarItem(
+ icon: Stack(
+ alignment: Alignment.centerLeft,
+ children: [
+ SvgPicture.asset("assets/icons/work_list.svg", color: currentIndex == 2 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
+ Consumer(
+ builder: (BuildContext cxt, DashboardProviderModel data, Widget? child) {
+ if (data.workListCounter == 0) {
+ return const SizedBox();
+ }
+ return Positioned(
+ right: 0,
+ top: 0,
+ child: Container(
+ padding: const EdgeInsets.only(left: 4, right: 4),
+ alignment: Alignment.center,
+ decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)),
+ child: data.workListCounter.toString().toText10(color: Colors.white),
+ ),
+ );
+ },
+ ),
+ ],
+ ),
+ label: LocaleKeys.workList.tr(),
+ ),
+ BottomNavigationBarItem(
+ icon: SvgPicture.asset("assets/icons/item_for_sale.svg", color: currentIndex == 3 ? MyColors.grey3AColor : MyColors.grey98Color).paddingAll(4),
+ label: LocaleKeys.itemsForSale.tr(),
+ ),
+ BottomNavigationBarItem(
+ icon: Stack(
+ alignment: Alignment.centerLeft,
+ children: [
+ SvgPicture.asset(
+ "assets/icons/chat/chat.svg",
+ color:
+ !checkIfPrivilegedForChat()
+ ? MyColors.lightGreyE3Color
+ : currentIndex == 4
+ ? MyColors.grey3AColor
+ : cProvider.disbaleChatForThisUser
+ ? MyColors.lightGreyE3Color
+ : MyColors.grey98Color,
+ ).paddingAll(4),
+ Consumer(
+ builder: (BuildContext cxt, ChatProviderModel data, Widget? child) {
+ return !checkIfPrivilegedForChat()
+ ? const SizedBox()
+ : Positioned(
+ right: 0,
+ top: 0,
+ child: Container(
+ padding: const EdgeInsets.only(left: 4, right: 4),
+ alignment: Alignment.center,
+ decoration: BoxDecoration(color: cProvider.disbaleChatForThisUser ? MyColors.pinkDarkColor : MyColors.redColor, borderRadius: BorderRadius.circular(17)),
+ child: data.chatUConvCounter.toString().toText10(color: Colors.white),
+ ),
+ );
+ },
+ ),
+ ],
+ ),
+ label: LocaleKeys.chat.tr(),
+ ),
+ ],
+ currentIndex: currentIndex,
+ selectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey3AColor, fontWeight: FontWeight.w600),
+ unselectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey98Color, fontWeight: FontWeight.w600),
+ type: BottomNavigationBarType.fixed,
+ selectedItemColor: MyColors.grey3AColor,
+ backgroundColor: MyColors.backgroundColor,
+ selectedIconTheme: const IconThemeData(color: MyColors.grey3AColor, size: 28),
+ unselectedIconTheme: const IconThemeData(color: MyColors.grey98Color, size: 28),
+ onTap: (int index) {
+ if (index == 1) {
+ Navigator.pushNamed(context, AppRoutes.mowadhafhi);
+ } else if (index == 2) {
+ Navigator.pushNamed(context, AppRoutes.workList);
+ } else if (index == 3) {
+ Navigator.pushNamed(context, AppRoutes.itemsForSale);
+ } else if (index == 4) {
+ if (!cProvider.disbaleChatForThisUser && checkIfPrivilegedForChat()) {
+ Navigator.pushNamed(context, AppRoutes.chat);
+ }
+ }
+ },
+ ),
+ ),
+ ),
);
- }
+ }
Widget eventActivityWidget(BuildContext context) {
- return (context
- .watch()
- .isEventLoadingLoading)
+ return (context.watch().isEventLoadingLoading)
? const MarathonBannerShimmer().paddingOnly(left: 21, right: 21, bottom: 21, top: 0)
- : (context
- .watch()
- .eventActivity != null && context
- .watch()
- .eventActivity!
- .isActive == true)
+ : (context.watch().eventActivity != null && context.watch().eventActivity!.isActive == true)
? const EventActivityBanner().paddingOnly(left: 21, right: 21, bottom: 21, top: 0)
: const SizedBox();
}
diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart
index 879173b..0a30857 100644
--- a/lib/ui/landing/widget/services_widget.dart
+++ b/lib/ui/landing/widget/services_widget.dart
@@ -92,7 +92,7 @@ class ServicesWidget extends StatelessWidget {
aspectRatio: 105 / 105,
child:
data.isServicesMenusLoading
- ? ServicesMenuShimmer()
+ ? const ServicesMenuShimmer()
: Container(
decoration: BoxDecoration(
color: Colors.white,
@@ -266,7 +266,6 @@ class ServicesWidget extends StatelessWidget {
await pro.fetchTicketAccuralBalance(context, DateTime.now());
pro.ticketHistoryTransactionList = await EITApiClient().getEITTransactions("HMG_TICKET_ITENARY_HR_EIT_SS", isCompleteList: true);
-
Utils.hideLoading(context);
// Here Need Work
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => TicketDetailedScreen(url: url, jwtToken: ssoToken.data!.accessToken)));
@@ -311,7 +310,7 @@ class ServicesWidget extends StatelessWidget {
padding: const EdgeInsets.only(left: 21, right: 21, top: 13, bottom: 13),
scrollDirection: Axis.horizontal,
itemBuilder: (cxt, index) {
- return AspectRatio(aspectRatio: 105 / 105, child: ServicesMenuShimmer());
+ return AspectRatio(aspectRatio: 105 / 105, child: const ServicesMenuShimmer());
},
separatorBuilder: (cxt, index) => 9.width,
itemCount: 4,
diff --git a/lib/widgets/shimmer/dashboard_shimmer_widget.dart b/lib/widgets/shimmer/dashboard_shimmer_widget.dart
index c11cf16..7d59899 100644
--- a/lib/widgets/shimmer/dashboard_shimmer_widget.dart
+++ b/lib/widgets/shimmer/dashboard_shimmer_widget.dart
@@ -8,6 +8,8 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:shimmer/shimmer.dart';
class GetAttendanceTrackingShimmer extends StatelessWidget {
+ const GetAttendanceTrackingShimmer({Key? key}) : super(key: key);
+
@override
Widget build(BuildContext context) {
return Container(
@@ -85,6 +87,8 @@ class GetAttendanceTrackingShimmer extends StatelessWidget {
}
class MenuShimmer extends StatelessWidget {
+ const MenuShimmer({Key? key}) : super(key: key);
+
@override
Widget build(BuildContext context) {
return Container(
@@ -122,6 +126,8 @@ class MenuShimmer extends StatelessWidget {
}
class ServicesHeaderShimmer extends StatelessWidget {
+ const ServicesHeaderShimmer({Key? key}) : super(key: key);
+
@override
Widget build(BuildContext context) {
return Row(
@@ -145,6 +151,8 @@ class ServicesHeaderShimmer extends StatelessWidget {
}
class ServicesMenuShimmer extends StatelessWidget {
+ const ServicesMenuShimmer({Key? key}) : super(key: key);
+
@override
Widget build(BuildContext context) {
return Container(
@@ -188,6 +196,75 @@ class ServicesMenuShimmer extends StatelessWidget {
}
}
+class GreetingCardShimmer extends StatelessWidget {
+ const GreetingCardShimmer({Key? key}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: 100,
+ decoration: BoxDecoration(
+ color: const Color(0xFFFAF4E7),
+ border: Border.all(width: 2, color: const Color(0xFFE7E7E7)),
+ borderRadius: BorderRadius.circular(20),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ width: 65,
+ height: 81,
+ decoration: BoxDecoration(
+ color: Colors.grey[300],
+ borderRadius: BorderRadius.circular(10),
+ ),
+ ).toShimmer(),
+ const SizedBox(width: 10),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ width: 150,
+ height: 16,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(4),
+ ),
+ ).toShimmer(),
+ const SizedBox(height: 8),
+ Container(
+ width: 120,
+ height: 16,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(4),
+ ),
+ ).toShimmer(),
+ ],
+ ).expanded,
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Container(
+ width: 60,
+ height: 12,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(4),
+ ),
+ ).toShimmer(),
+ ],
+ ),
+ ],
+ ).paddingOnly(left: 8, right: 8, top: 6, bottom: 12),
+ ).paddingOnly(left: 21, right: 21, top: 14, bottom: 14);
+ }
+}
+
+
class MarathonBannerShimmer extends StatelessWidget {
const MarathonBannerShimmer({Key? key}) : super(key: key);
@@ -305,3 +382,4 @@ class ChatHomeShimmer extends StatelessWidget {
));
}
}
+