From 47732d67cbde1cc1250356cd151a4bb4b9500a13 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 12:01:21 +0300 Subject: [PATCH 1/9] drawer item align issue fixed on arabic. --- lib/extensions/string_extensions.dart | 4 +- lib/provider/chat_provider_model.dart | 4 +- lib/ui/dialogs/success_dialog.dart | 3 + lib/ui/landing/widget/app_drawer.dart | 8 +-- lib/ui/landing/widget/drawer_item.dart | 60 ------------------- .../dynamic_screens/dynamic_input_screen.dart | 10 ++-- lib/widgets/mark_attendance_widget.dart | 2 - 7 files changed, 14 insertions(+), 77 deletions(-) delete mode 100644 lib/ui/landing/widget/drawer_item.dart diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index e9e7e93..e323487 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -90,9 +90,9 @@ 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 isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines, bool isCenter = false}) => Text( + Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines, TextAlign? textAlign, bool isCenter = false}) => Text( this, - textAlign: isCenter ? TextAlign.center : TextAlign.left, + textAlign: isCenter ? TextAlign.center : (textAlign ?? TextAlign.left), maxLines: maxlines, style: TextStyle( color: color ?? MyColors.darkTextColor, diff --git a/lib/provider/chat_provider_model.dart b/lib/provider/chat_provider_model.dart index a96080b..ec4aa0c 100644 --- a/lib/provider/chat_provider_model.dart +++ b/lib/provider/chat_provider_model.dart @@ -820,8 +820,8 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { sFileType = ""; deleteData(); favUsersList.clear(); - searchedChats!.clear(); - pChatHistory!.clear(); + searchedChats?.clear(); + pChatHistory?.clear(); chatHubConnection.stop(); AppState().chatDetails = null; } diff --git a/lib/ui/dialogs/success_dialog.dart b/lib/ui/dialogs/success_dialog.dart index a5df64f..65c6ec3 100644 --- a/lib/ui/dialogs/success_dialog.dart +++ b/lib/ui/dialogs/success_dialog.dart @@ -48,6 +48,9 @@ class _SuccessDialogState extends State with TickerProviderStateM width: size, height: size, child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(25.0), + ), child: Lottie.asset( 'assets/lottie/lt_success.json', repeat: false, diff --git a/lib/ui/landing/widget/app_drawer.dart b/lib/ui/landing/widget/app_drawer.dart index 4b4219d..7df697c 100644 --- a/lib/ui/landing/widget/app_drawer.dart +++ b/lib/ui/landing/widget/app_drawer.dart @@ -150,13 +150,9 @@ class _AppDrawerState extends State { 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, - ), + SvgPicture.asset(icon, height: 20, width: 20), 9.width, - title.toText14(color: color).expanded + title.toText14(color: color, textAlign: AppState().isArabic(context) ? TextAlign.right : null).expanded, ], ).paddingOnly(left: 21, top: 10, bottom: 10, right: 21).onPress(closeDrawer ? () async { diff --git a/lib/ui/landing/widget/drawer_item.dart b/lib/ui/landing/widget/drawer_item.dart deleted file mode 100644 index 4654e5b..0000000 --- a/lib/ui/landing/widget/drawer_item.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -class DrawerItem extends StatefulWidget { - final String title; - final String subTitle; - final IconData icon; - final Color color; - final dynamic assetLink; - - const DrawerItem(this.title, {required this.icon, required this.color, this.subTitle = '', this.assetLink}); - - @override - _DrawerItemState createState() => _DrawerItemState(); -} - -class _DrawerItemState extends State { - @override - Widget build(BuildContext context) { - return Container( - margin: EdgeInsets.only(top: 0, bottom: 5, left: 0, right: 0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (widget.assetLink != null) - Container( - height: 20, - width: 20, - child: Image.asset(widget.assetLink), - ), - if (widget.assetLink == null) - Icon( - widget.icon, - color: widget.color, - size: 25, - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - width: MediaQuery.of(context).size.width * 0.45, - child: Text(widget.title, - style: TextStyle( - color: widget.color ?? Color(0xFF2E303A), - fontSize: 14, - fontFamily: 'Poppins', - fontWeight: FontWeight.w600, - letterSpacing: -0.84, - )), - ), - ], - ), - ), - ], - )); - } -} diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index a94a6e2..1ec79a0 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -57,7 +57,7 @@ class _DynamicInputScreenState extends State { } void validateTransaction() async { - try { + // try { Utils.showLoading(context); List> values = getEitDffStructureList!.map((e) { String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; @@ -98,10 +98,10 @@ class _DynamicInputScreenState extends State { Utils.showLoading(context); await LeaveBalanceApiClient().cancelHrTransaction(submitEITTransactionList.pTRANSACTIONID!); Utils.hideLoading(context); - } catch (ex) { - Utils.hideLoading(context); - Utils.handleException(ex, context, null); - } + // } catch (ex) { + // Utils.hideLoading(context); + // Utils.handleException(ex, context, null); + // } } String dESCFLEXCONTEXTCODE = ""; diff --git a/lib/widgets/mark_attendance_widget.dart b/lib/widgets/mark_attendance_widget.dart index cbf70ad..a599c79 100644 --- a/lib/widgets/mark_attendance_widget.dart +++ b/lib/widgets/mark_attendance_widget.dart @@ -170,7 +170,6 @@ class _MarkAttendanceWidgetState extends State { ); } } catch (ex) { - print(ex); Utils.hideLoading(context); Utils.handleException(ex, context, (msg) { Utils.confirmDialog(context, msg); @@ -239,7 +238,6 @@ class _MarkAttendanceWidgetState extends State { child: SuccessDialog(widget.isFromDashboard), ); } catch (ex) { - print("performWifiAttendance: " + ex.toString()); await closeWifiRequest(); Utils.hideLoading(context); Utils.handleException(ex, context, (msg) { From 47b712d132d080073af10be56f099bb8538ba670 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 15:41:04 +0300 Subject: [PATCH 2/9] monthly attendance & ticket balance chart fix. --- lib/ui/attendance/monthly_attendance_screen.dart | 4 ++-- lib/widgets/balances_dashboard_widget.dart | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/ui/attendance/monthly_attendance_screen.dart b/lib/ui/attendance/monthly_attendance_screen.dart index b6407a8..9e48c81 100644 --- a/lib/ui/attendance/monthly_attendance_screen.dart +++ b/lib/ui/attendance/monthly_attendance_screen.dart @@ -85,8 +85,8 @@ class _MonthlyAttendanceScreenState extends State { @override Widget build(BuildContext context) { Map dataMap = { - "Present": getTimeCardSummaryList?.aTTENDEDDAYS?.toDouble() ?? 75, - "Absent": getTimeCardSummaryList?.aBSENTDAYS?.toDouble() ?? 25, + "Present": getTimeCardSummaryList?.aTTENDEDDAYS?.toDouble() ?? 0, + "Absent": getTimeCardSummaryList?.aBSENTDAYS?.toDouble() ?? 0, }; return Scaffold( backgroundColor: Colors.white, diff --git a/lib/widgets/balances_dashboard_widget.dart b/lib/widgets/balances_dashboard_widget.dart index aaac793..8909dab 100644 --- a/lib/widgets/balances_dashboard_widget.dart +++ b/lib/widgets/balances_dashboard_widget.dart @@ -73,7 +73,7 @@ class _BalancesDashboardWidgetState extends State { ]; } else { chartModelList = [ - PieChartModel(LocaleKeys.adult.tr(), accrualList[1].accrualNetEntitlement ?? 0, MyColors.textMixColor, titleAppend: ""), + PieChartModel(LocaleKeys.adult.tr(), accrualList[1].accrualNetEntitlement?.toDouble() ?? 0, MyColors.textMixColor, titleAppend: ""), PieChartModel(LocaleKeys.child.tr(), accrualList[2].accrualNetEntitlement?.toDouble() ?? 0, MyColors.backgroundBlackColor, titleAppend: ""), PieChartModel(LocaleKeys.infants.tr(), accrualList[3].accrualNetEntitlement?.toDouble() ?? 0, MyColors.pinkColor, titleAppend: ""), ]; @@ -101,7 +101,7 @@ class _BalancesDashboardWidgetState extends State { ticketBalanceAccrualList = Provider.of(context, listen: false).accrualList ?? []; if (ticketBalanceAccrualList!.isNotEmpty) { chartModelList = [ - PieChartModel(LocaleKeys.adult.tr(), ticketBalanceAccrualList![1].accrualNetEntitlement ?? 0, MyColors.textMixColor, titleAppend: ""), + PieChartModel(LocaleKeys.adult.tr(), ticketBalanceAccrualList![1].accrualNetEntitlement?.toDouble() ?? 0, MyColors.textMixColor, titleAppend: ""), PieChartModel(LocaleKeys.child.tr(), ticketBalanceAccrualList![2].accrualNetEntitlement?.toDouble() ?? 0, MyColors.backgroundBlackColor, titleAppend: ""), PieChartModel(LocaleKeys.infants.tr(), ticketBalanceAccrualList![3].accrualNetEntitlement?.toDouble() ?? 0, MyColors.pinkColor, titleAppend: ""), ]; @@ -185,7 +185,7 @@ class _BalancesDashboardWidgetState extends State { Widget getChart(List chartModelList) { List _colorList = chartModelList.map((e) => e.color).toList(); return PieChart( - dataMap: {for (var e in chartModelList) e.title: e.parsedValue}, + dataMap: {for (var e in chartModelList) e.title: e.value}, animationDuration: const Duration(milliseconds: 800), chartRadius: MediaQuery.of(context).size.width / 3.2, colorList: _colorList, From 705adbc17ebae09b03457e05de1592148a6017df Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 15:51:35 +0300 Subject: [PATCH 3/9] code format monthly attendance --- .../attendance/monthly_attendance_screen.dart | 403 +++++++++--------- 1 file changed, 202 insertions(+), 201 deletions(-) diff --git a/lib/ui/attendance/monthly_attendance_screen.dart b/lib/ui/attendance/monthly_attendance_screen.dart index 9e48c81..46d4d40 100644 --- a/lib/ui/attendance/monthly_attendance_screen.dart +++ b/lib/ui/attendance/monthly_attendance_screen.dart @@ -112,7 +112,8 @@ class _MonthlyAttendanceScreenState extends State { ], ).onPress(() async { showMonthPicker( - context: context, //locale: EasyLocalization.of(context)?.locale, + context: context, + //locale: EasyLocalization.of(context)?.locale, initialDate: formattedDate, firstDate: DateTime(searchYear - 2), lastDate: DateTime.now(), @@ -419,211 +420,211 @@ class _MonthlyAttendanceScreenState extends State { } if (details.date!.month == formattedDate.month && details.date!.year == formattedDate.year) { int val = details.date!.day; - getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y' ? - showModalBottomSheet( - context: context, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)), - isScrollControlled: true, - backgroundColor: MyColors.backgroundBlackColor, - builder: (_) { - return DraggableScrollableSheet( - maxChildSize: 0.9, - expand: false, - builder: (_, controller) { - dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; - DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss").parse(dmyString); - return Column( - children: [ - Container( - width: 49, - height: 7, - margin: const EdgeInsets.symmetric(vertical: 10), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(25), - color: MyColors.darkGreyColor, - ), - ), - Expanded( - child: ListView.builder( - controller: controller, - itemCount: 1, - itemBuilder: (_, i) => - Container( - decoration: const BoxDecoration( - borderRadius: BorderRadius.vertical( - top: Radius.circular(25.0), + getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y' + ? showModalBottomSheet( + context: context, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)), + isScrollControlled: true, + backgroundColor: MyColors.backgroundBlackColor, + builder: (_) { + return DraggableScrollableSheet( + maxChildSize: 0.9, + expand: false, + builder: (_, controller) { + dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; + DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss").parse(dmyString); + return Column( + children: [ + Container( + width: 49, + height: 7, + margin: const EdgeInsets.symmetric(vertical: 10), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25), + color: MyColors.darkGreyColor, + ), + ), + Expanded( + child: ListView.builder( + controller: controller, + itemCount: 1, + itemBuilder: (_, i) => Container( + decoration: const BoxDecoration( + borderRadius: BorderRadius.vertical( + top: Radius.circular(25.0), + ), + color: MyColors.backgroundBlackColor, ), - color: MyColors.backgroundBlackColor, - ), - child: Column( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), - LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor), - 12.height, - CircularStepProgressBar( - totalSteps: 16 * 4, - currentStep: percentage, - width: 224, - height: 236, - selectedColor: MyColors.gradiantEndColor, - unselectedColor: MyColors.grey70Color, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - "${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true), - LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor), - 28.height, - LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor), - "${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true), - ], + child: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), + LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor), + 12.height, + CircularStepProgressBar( + totalSteps: 16 * 4, + currentStep: percentage, + width: 224, + height: 236, + selectedColor: MyColors.gradiantEndColor, + unselectedColor: MyColors.grey70Color, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + "${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true), + LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor), + 28.height, + LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor), + "${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true), + ], + ).center, ).center, - ).center, - ], - ).paddingOnly(left: 21, right: 21, top: 27, bottom: 37), - Stack( - children: [ - Container( - width: double.infinity, - decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), - padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29), - child: Column( - children: [ - Row( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.actualCheckIn.tr().toText11( - color: MyColors.grey67Color, - ), - "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != "" - ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) - : "__".toText22(color: Colors.black, isBold: true), - ], - ).expanded, - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.actualCheckOut.tr().toText11( - color: MyColors.grey67Color, - ), - "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != "" - ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) - : "__".toText22(color: Colors.black, isBold: true), - ], - ).expanded, - ], - ), - 25.height, - const Divider( - height: 1, - thickness: 1, - color: MyColors.lightGreyEFColor, - ), - 25.height, - Row( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.approvedCheckIn.tr().toText11( - color: MyColors.grey67Color, - ), - "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != "" - ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) - : "__".toText22(color: MyColors.greenColor, isBold: true), - ], - ).expanded, - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.approvedCheckOut.tr().toText11( - color: MyColors.grey67Color, - ), - "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != "" - ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) - : "__".toText22(color: MyColors.greenColor, isBold: true), - ], - ).expanded, - ], - ), - 25.height, - const Divider( - height: 1, - thickness: 1, - color: MyColors.lightGreyEFColor, - ), - 25.height, - Row( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.lateIn.tr().toText11( - color: MyColors.grey67Color, - ), - "${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true), - ], - ).expanded, - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.excess.tr().toText11( - color: MyColors.grey67Color, - ), - "${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), - ], - ).expanded, - ], - ), - 25.height, - const Divider( - height: 1, - thickness: 1, - color: MyColors.lightGreyEFColor, - ), - 25.height, - Row( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.shortage.tr().toText11( - color: MyColors.grey67Color, - ), - "${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), - ], - ).expanded, - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.earlyOut.tr().toText11( - color: MyColors.grey67Color, - ), - "${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true), - ], - ).expanded, - ], - ), - ], + ], + ).paddingOnly(left: 21, right: 21, top: 27, bottom: 37), + Stack( + children: [ + Container( + width: double.infinity, + decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), + padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29), + child: Column( + children: [ + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.actualCheckIn.tr().toText11( + color: MyColors.grey67Color, + ), + "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != "" + ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) + : "__".toText22(color: Colors.black, isBold: true), + ], + ).expanded, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.actualCheckOut.tr().toText11( + color: MyColors.grey67Color, + ), + "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != "" + ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) + : "__".toText22(color: Colors.black, isBold: true), + ], + ).expanded, + ], + ), + 25.height, + const Divider( + height: 1, + thickness: 1, + color: MyColors.lightGreyEFColor, + ), + 25.height, + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.approvedCheckIn.tr().toText11( + color: MyColors.grey67Color, + ), + "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != "" + ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) + : "__".toText22(color: MyColors.greenColor, isBold: true), + ], + ).expanded, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.approvedCheckOut.tr().toText11( + color: MyColors.grey67Color, + ), + "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != "" + ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) + : "__".toText22(color: MyColors.greenColor, isBold: true), + ], + ).expanded, + ], + ), + 25.height, + const Divider( + height: 1, + thickness: 1, + color: MyColors.lightGreyEFColor, + ), + 25.height, + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.lateIn.tr().toText11( + color: MyColors.grey67Color, + ), + "${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true), + ], + ).expanded, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.excess.tr().toText11( + color: MyColors.grey67Color, + ), + "${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), + ], + ).expanded, + ], + ), + 25.height, + const Divider( + height: 1, + thickness: 1, + color: MyColors.lightGreyEFColor, + ), + 25.height, + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.shortage.tr().toText11( + color: MyColors.grey67Color, + ), + "${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), + ], + ).expanded, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.earlyOut.tr().toText11( + color: MyColors.grey67Color, + ), + "${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true), + ], + ).expanded, + ], + ), + ], + ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), ), - ), - ), - ], - ); - }, - ); - }, - ):null; + ), + ], + ); + }, + ); + }, + ) + : null; } } From 45a5fdad0246b573d274e935dba67d5c6b9c9937 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 16:48:11 +0300 Subject: [PATCH 4/9] ios nfc mark attendance confirmation dialog issue fix. --- lib/widgets/mark_attendance_widget.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/widgets/mark_attendance_widget.dart b/lib/widgets/mark_attendance_widget.dart index a599c79..dfe3b79 100644 --- a/lib/widgets/mark_attendance_widget.dart +++ b/lib/widgets/mark_attendance_widget.dart @@ -161,11 +161,12 @@ class _MarkAttendanceWidgetState extends State { ); } else { bool status = await model.fetchAttendanceTracking(context); + if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3)); Utils.hideLoading(context); showMDialog( context, backgroundColor: Colors.transparent, - isDismissable: false, + isDismissable: true, child: SuccessDialog(widget.isFromDashboard), ); } @@ -272,7 +273,7 @@ class _MarkAttendanceWidgetState extends State { showMDialog( context, backgroundColor: Colors.transparent, - isDismissable: false, + isDismissable: true, child: SuccessDialog(widget.isFromDashboard), ); } catch (ex) { From dd8da2cdfe40284a71bd82fc40afb928d9b38fe4 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 16:58:26 +0300 Subject: [PATCH 5/9] upper case check removed from forgot & change password. --- lib/ui/login/change_password_screen.dart | 8 ++++---- lib/ui/login/new_password_screen.dart | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/ui/login/change_password_screen.dart b/lib/ui/login/change_password_screen.dart index e2d292e..4db3ae8 100644 --- a/lib/ui/login/change_password_screen.dart +++ b/lib/ui/login/change_password_screen.dart @@ -100,8 +100,8 @@ class _ChangePasswordScreenState extends State { passwordConstraintsUI(LocaleKeys.doNotUseRecentPassword.tr(), true), 8.height, passwordConstraintsUI(LocaleKeys.atLeastOneLowercase.tr(), checkRegEx(r'[a-z]')), - 8.height, - passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')), + // 8.height, + // passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')), 8.height, passwordConstraintsUI(LocaleKeys.atLeastOneNumeric.tr(), checkRegEx(r'[0-9]')), 8.height, @@ -131,14 +131,14 @@ class _ChangePasswordScreenState extends State { return false; } - bool hasUppercase = password.contains(RegExp(r'[A-Z]')); + // bool hasUppercase = password.contains(RegExp(r'[A-Z]')); bool hasDigits = password.contains(RegExp(r'[0-9]')); bool hasLowercase = password.contains(RegExp(r'[a-z]')); bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]')); bool hasMinLength = password.length >= minLength; bool isMatched = password == confirmPassword.text; - return hasDigits && hasUppercase && hasLowercase && hasSpecialCharacters && hasMinLength && isMatched && checkRepeatedChars(password); + return hasDigits && hasLowercase && hasSpecialCharacters && hasMinLength && isMatched && checkRepeatedChars(password); } bool checkRepeatedChars(String password) { diff --git a/lib/ui/login/new_password_screen.dart b/lib/ui/login/new_password_screen.dart index 217e049..9efee64 100644 --- a/lib/ui/login/new_password_screen.dart +++ b/lib/ui/login/new_password_screen.dart @@ -94,8 +94,8 @@ class _NewPasswordScreenState extends State { passwordConstraintsUI(LocaleKeys.doNotUseRecentPassword.tr(), true), 8.height, passwordConstraintsUI(LocaleKeys.atLeastOneLowercase.tr(), checkRegEx(r'[a-z]')), - 8.height, - passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')), + // 8.height, + // passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')), 8.height, passwordConstraintsUI(LocaleKeys.atLeastOneNumeric.tr(), checkRegEx(r'[0-9]')), 8.height, @@ -143,14 +143,14 @@ class _NewPasswordScreenState extends State { return false; } - bool hasUppercase = password.contains(RegExp(r'[A-Z]')); + // bool hasUppercase = password.contains(RegExp(r'[A-Z]')); bool hasDigits = password.contains(RegExp(r'[0-9]')); bool hasLowercase = password.contains(RegExp(r'[a-z]')); // bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]')); bool hasMinLength = password.length >= minLength; bool isMatched = password == confirmPassword.text; - return hasDigits && hasUppercase && hasLowercase && hasMinLength && isMatched && checkRepeatedChars(password); + return hasDigits && hasLowercase && hasMinLength && isMatched && checkRepeatedChars(password); } bool checkRepeatedChars(String password) { From 7131706998ce541b4cd8d7072f682be3ed711ec2 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 25 Dec 2022 17:05:25 +0300 Subject: [PATCH 6/9] password requirement check improvement. --- lib/ui/login/change_password_screen.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ui/login/change_password_screen.dart b/lib/ui/login/change_password_screen.dart index 4db3ae8..e96901b 100644 --- a/lib/ui/login/change_password_screen.dart +++ b/lib/ui/login/change_password_screen.dart @@ -108,8 +108,8 @@ class _ChangePasswordScreenState extends State { passwordConstraintsUI(LocaleKeys.minimum8Characters.tr(), password.text.length >= 8), 8.height, passwordConstraintsUI(LocaleKeys.doNotAddRepeatingLetters.tr(), checkRepeatedChars(password.text)), - 8.height, - passwordConstraintsUI(LocaleKeys.itShouldContainSpecialCharacter.tr(), checkRegEx(r'[!@#$%^&*(),.?":{}|<>]')), + // 8.height, + // passwordConstraintsUI(LocaleKeys.itShouldContainSpecialCharacter.tr(), checkRegEx(r'[!@#$%^&*(),.?":{}|<>]')), 8.height, passwordConstraintsUI(LocaleKeys.confirmPasswordMustMatch.tr(), password.text.isNotEmpty && password.text == confirmPassword.text), ], @@ -134,11 +134,11 @@ class _ChangePasswordScreenState extends State { // bool hasUppercase = password.contains(RegExp(r'[A-Z]')); bool hasDigits = password.contains(RegExp(r'[0-9]')); bool hasLowercase = password.contains(RegExp(r'[a-z]')); - bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]')); + // bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]')); bool hasMinLength = password.length >= minLength; bool isMatched = password == confirmPassword.text; - return hasDigits && hasLowercase && hasSpecialCharacters && hasMinLength && isMatched && checkRepeatedChars(password); + return hasDigits && hasLowercase && hasMinLength && isMatched && checkRepeatedChars(password); } bool checkRepeatedChars(String password) { From 642fee73314edc9b82d921d4c9898ceb651d83f3 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 26 Dec 2022 09:20:22 +0300 Subject: [PATCH 7/9] worklist setting update data payload issue fixed. --- lib/models/worklist/update_user_type_list.dart | 8 ++++---- lib/ui/work_list/worklist_settings.dart | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/models/worklist/update_user_type_list.dart b/lib/models/worklist/update_user_type_list.dart index 1637880..d5763ff 100644 --- a/lib/models/worklist/update_user_type_list.dart +++ b/lib/models/worklist/update_user_type_list.dart @@ -8,16 +8,16 @@ class UpdateUserTypesList { UpdateUserTypesList.fromJson(Map json) { itemID = json['ItemID']; - pFYAENABLEDFALG = json['P_FYAENABLED_FALG']; - pFYIENABLEDFALG = json['P_FYIENABLED_FALG']; + pFYAENABLEDFALG = json['P_FYA_ENABLED_FALG']; + pFYIENABLEDFALG = json['P_FYI_ENABLED_FLAG']; pITEMTYPE = json['P_ITEM_TYPE']; } Map toJson() { Map data = new Map(); data['ItemID'] = this.itemID; - data['P_FYAENABLED_FALG'] = this.pFYAENABLEDFALG; - data['P_FYIENABLED_FALG'] = this.pFYIENABLEDFALG; + data['P_FYA_ENABLED_FALG'] = this.pFYAENABLEDFALG; + data['P_FYI_ENABLED_FLAG'] = this.pFYIENABLEDFALG; data['P_ITEM_TYPE'] = this.pITEMTYPE; return data; } diff --git a/lib/ui/work_list/worklist_settings.dart b/lib/ui/work_list/worklist_settings.dart index 77c1d81..7362028 100644 --- a/lib/ui/work_list/worklist_settings.dart +++ b/lib/ui/work_list/worklist_settings.dart @@ -47,13 +47,12 @@ class _WorklistSettingsState extends State { try { Utils.showLoading(context); List> itemList = []; - for (var element in getUserItemTypesList) { - itemList.add(UpdateUserTypesList(itemID: element.uSERITEMTYPEID, pITEMTYPE: element.iTEMTYPE, pFYAENABLEDFALG: element.fYAENABLEDFALG, pFYIENABLEDFALG: element.fYIENABLEDFLAG).toJson()); + for (int index=0;index Date: Mon, 26 Dec 2022 09:35:14 +0300 Subject: [PATCH 8/9] worklist setting ui improvements. --- lib/ui/work_list/worklist_settings.dart | 137 ++++++++++++------------ 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/lib/ui/work_list/worklist_settings.dart b/lib/ui/work_list/worklist_settings.dart index 7362028..4fc9424 100644 --- a/lib/ui/work_list/worklist_settings.dart +++ b/lib/ui/work_list/worklist_settings.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.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'; @@ -26,6 +25,7 @@ class _WorklistSettingsState extends State { List getUserItemTypesList = []; UpdateUserItemTypesList? updateUserItemTypesList; + @override void initState() { super.initState(); userItemTypesList(); @@ -47,8 +47,13 @@ class _WorklistSettingsState extends State { try { Utils.showLoading(context); List> itemList = []; - for (int index=0;index { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: LocaleKeys.worklistSettings.tr(), - ), - body: Column( - children: [ - ListView( - padding: const EdgeInsets.only(top: 21, left: 21, right: 21), - children: [ - LocaleKeys.TurnNotificationsFor.tr().toText22(color: MyColors.blackColor), - 16.height, - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - LocaleKeys.itemType.tr().toText14(color: MyColors.blackColor), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: ["FYA".tr().toText14(color: MyColors.blackColor), 30.width, "FYI".tr().toText14(color: MyColors.blackColor), 30.width], - ) - ], - ), - const Divider(color: MyColors.greyA5Color), - SingleChildScrollView( - scrollDirection: Axis.vertical, - child: ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - itemCount: getUserItemTypesList == null ? 0 : getUserItemTypesList.length, - itemBuilder: (BuildContext context, int index) { - return Column(children: [ - customSwitch(getUserItemTypesList[index]), - Divider( - color: MyColors.greyC4Color, - thickness: 0.5, - ), - ]); - }), - ), - ], - ).expanded, - DefaultButton(LocaleKeys.save.tr(), () async { - updateUserItem(); - }).insideContainer, - ], - )); + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.worklistSettings.tr(), + ), + body: Column( + children: [ + ListView( + padding: const EdgeInsets.only(top: 21, left: 21, right: 21), + children: [ + LocaleKeys.TurnNotificationsFor.tr().toText22(color: MyColors.blackColor), + 16.height, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LocaleKeys.itemType.tr().toText14(color: MyColors.blackColor), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: ["FYA".tr().toText14(color: MyColors.blackColor), 30.width, "FYI".tr().toText14(color: MyColors.blackColor), 30.width], + ) + ], + ), + const Divider(color: MyColors.greyA5Color), + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: getUserItemTypesList.length, + separatorBuilder: (cxt, index) => 1.divider, + itemBuilder: (BuildContext context, int index) => customSwitch(getUserItemTypesList[index]), + ), + ], + ).expanded, + DefaultButton(LocaleKeys.save.tr(), () async { + updateUserItem(); + }).insideContainer, + ], + ), + ); } Widget customSwitch(GetUserItemTypesList list) { return Padding( - padding: const EdgeInsets.only(top: 21), + padding: const EdgeInsets.only(top: 8, bottom: 8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - list.iTEMTYPE.toString(), - style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.blackColor), - ), + list.iTEMTYPE!.toText16(), const Spacer(), Row( children: [ - CupertinoSwitch( - trackColor: MyColors.grey57Color, - activeColor: MyColors.textMixColor, - value: list?.fYAENABLEDFALG == 'Y' ? true : false, - onChanged: (value) { - setState(() { - list?.fYAENABLEDFALG = value == true ? 'Y' : 'N'; - }); - }), - CupertinoSwitch( + Transform.scale( + scale: 0.8, + child: CupertinoSwitch( + trackColor: MyColors.grey57Color, + activeColor: MyColors.textMixColor, + value: list.fYAENABLEDFALG == 'Y', + onChanged: (value) { + setState(() { + list.fYAENABLEDFALG = value ? 'Y' : 'N'; + }); + }), + ), + Transform.scale( + scale: 0.8, + child: CupertinoSwitch( trackColor: MyColors.grey57Color, activeColor: MyColors.textMixColor, - value: list?.fYIENABLEDFLAG == 'Y' ? true : false, + value: list.fYIENABLEDFLAG == 'Y', onChanged: (value) { setState(() { - // list.isFYI = value; - list?.fYIENABLEDFLAG = value == true ? 'Y' : 'N'; + list.fYIENABLEDFLAG = value ? 'Y' : 'N'; }); - }), + }, + ), + ), ], ) ], From 5261f3e416a9d327c731b1fee18d2d612539450e Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 26 Dec 2022 11:58:08 +0300 Subject: [PATCH 9/9] marathon placement change, worklist type list improvement. --- lib/ui/landing/dashboard_screen.dart | 203 +++++++++---------- lib/ui/login/login_screen.dart | 2 + lib/ui/work_list/work_list_screen.dart | 263 +++++++++++++------------ 3 files changed, 243 insertions(+), 225 deletions(-) diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index 22768e6..4172cc7 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -1,7 +1,7 @@ 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'; @@ -323,12 +323,104 @@ class _DashboardScreenState extends State { ], ), ], - ).paddingOnly(left: 21, right: 21, top: 7), - context.watch().isLoading - ? const MarathonBannerShimmer().paddingAll(20) - : MarathonBanner(isMarathonUpcoming: context.watch().isUpComingMarathon).paddingAll(20), - ServicesWidget(), - 8.height, + ).paddingOnly(left: 21, right: 21, top: 7, bottom: 21), + 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].rowID!, + transitionOnUserGestures: true, + child: Image.network( + data.getOffersList[index].bannerImage!, + fit: BoxFit.contain, + ), + ), + ), + ), + 4.height, + Expanded( + child: AppState().isArabic(context) + ? data.getOffersList[index].titleAR!.toText12(isCenter: true, maxLine: 1) + : data.getOffersList[index].title!.toText12(isCenter: true, maxLine: 1), + ), + ], + ), + ), + ); + }, + separatorBuilder: (BuildContext cxt, int index) => 8.width, + itemCount: 6), + ); + }, + ), + ], + ), Container( width: double.infinity, padding: const EdgeInsets.only(top: 31), @@ -339,101 +431,14 @@ class _DashboardScreenState extends State { ), child: 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( - 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].rowID!, - transitionOnUserGestures: true, - child: Image.network( - data.getOffersList[index].bannerImage!, - fit: BoxFit.contain, - ), - ), - ), - ), - 4.height, - Expanded( - child: AppState().isArabic(context) - ? data.getOffersList[index].titleAR!.toText12(isCenter: true, maxLine: 1) - : data.getOffersList[index].title!.toText12(isCenter: true, maxLine: 1), - ), - ], - ), - ), - ); - }, - separatorBuilder: (BuildContext cxt, int index) => 8.width, - itemCount: 6), - ); - }, - ), + ServicesWidget(), + context.watch().isLoading + ? const MarathonBannerShimmer().paddingAll(20) + : MarathonBanner(isMarathonUpcoming: context.watch().isUpComingMarathon).paddingOnly(left: 21, right: 21, bottom: 21, top: 8), ], ), - ) + ), ], ), ), diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index 04c3077..3cc74b1 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -95,6 +95,8 @@ class _LoginScreenState extends State { firebaseToken = await _firebaseMessaging.getToken(); loginInfo = await LoginApiClient().getMobileLoginInfoNEW(firebaseToken ?? "", Platform.isAndroid ? "android" : "ios"); if (loginInfo == null) { + await checkPrefs(); + _autoLogin = false; Utils.hideLoading(context); return; } else { diff --git a/lib/ui/work_list/work_list_screen.dart b/lib/ui/work_list/work_list_screen.dart index 69fb7f3..9b7fbe5 100644 --- a/lib/ui/work_list/work_list_screen.dart +++ b/lib/ui/work_list/work_list_screen.dart @@ -81,7 +81,7 @@ class _WorkListScreenState extends State { value: 0, name: 'COC', fullName: LocaleKeys.itemCreation.tr(), active: false, color: [Color(0xff787299), Color(0xff1AB170)], icon: "assets/images/miss_swipe.svg", key: 'COC', disable: true) ]; - int workListItemIndex = 0; + int? workListItemIndex; List? workList; int pageNumber = 1; @@ -99,7 +99,7 @@ class _WorkListScreenState extends State { super.initState(); providerData = Provider.of(context, listen: false); calculateCounter(); - getWorkList(); + if (workListItemIndex != null) getWorkList(); } void calculateCounter() { @@ -115,11 +115,17 @@ class _WorkListScreenState extends State { } } }); + workListItemTypes.removeWhere((element) => element.value == 0); + if (workListItemTypes.isNotEmpty) { + workListItemIndex = 0; + } else { + workListItemIndex = null; + } } void verifyWorkListCounter() { workListItemTypes.forEach((workListElement) { - if (workListElement.key == "ITG" && workListItemTypes[workListItemIndex].key == "ITG") { + if (workListElement.key == "ITG" && workListItemTypes[workListItemIndex!].key == "ITG") { workListElement.value = providerData.itgFormsModel?.totalCount ?? 0; if ((AppState().requestAllList?.length ?? 0) != workListElement.value) { workListElement.value = AppState().requestAllList?.length ?? 0; @@ -132,7 +138,7 @@ class _WorkListScreenState extends State { workListElement.value = providerData.cocFinalCount; } else { providerData.getOpenNotificationsList?.forEach((element) { - if ((element.itemType == workListItemTypes[workListItemIndex].key) && element.itemType == workListElement.key) { + if ((element.itemType == workListItemTypes[workListItemIndex!].key) && element.itemType == workListElement.key) { if ((AppState().workList?.length ?? 0) != (element.openNtfNumber ?? 0)) { workListElement.value = AppState().workList?.length ?? 0; providerData.workListCounter = providerData.workListCounter - ((element.openNtfNumber ?? 0) - (AppState().workList?.length ?? 0)); @@ -162,7 +168,7 @@ class _WorkListScreenState extends State { Future getWorkList({bool showLoading = true}) async { try { if (showLoading) Utils.showLoading(context); - if (workListItemTypes[workListItemIndex].key == "ITG") { + if (workListItemTypes[workListItemIndex!].key == "ITG") { itgFormsModel = await WorkListApiClient().getITGTaskCountRequestType(); List requestAllList = []; for (int i = 0; i < (itgFormsModel?.requestType!.length ?? 0); i++) { @@ -178,7 +184,7 @@ class _WorkListScreenState extends State { } } else { itgRequestTypeIndex = null; - workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex].key, pNotificationType.toString()); + workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex!].key, pNotificationType.toString()); AppState().setWorkList = workList; } if (showLoading) Utils.hideLoading(context); @@ -216,127 +222,129 @@ class _WorkListScreenState extends State { return Scaffold( backgroundColor: Colors.white, appBar: AppBarWidget(context, title: LocaleKeys.workList.tr(), showWorkListSettingButton: true), - body: SizedBox( - width: double.infinity, - height: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 40, - child: ListView.separated( - controller: _controller, - itemBuilder: (context, index) { - return Container( - padding: const EdgeInsets.only(left: 21, right: 21, top: 8, bottom: 8), - alignment: Alignment.center, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(6), color: workListItemIndex == index ? MyColors.darkIconColor : MyColors.lightGreyEAColor), - child: ("${workListItemTypes[index].name} ${workListItemTypes[index].value > 0 ? "(${workListItemTypes[index].value})" : ""}") - .toText12(color: workListItemIndex == index ? MyColors.white : MyColors.black), - ).onPress(() { - if (pNotificationType != 1) { - pNotificationType = 1; - } - if (workListItemIndex != index && !workListItemTypes[index].disable) { - workListItemIndex = index; - if (workListItemTypes[index].value == 0) { - workList = []; - itgRequestTypeIndex = null; - } else { - workList = null; - } - setState(() {}); - if (workListItemTypes[index].value > 0) { - getWorkList(); - } - } - }); - }, - separatorBuilder: (context, index) => 8.width, - shrinkWrap: true, - itemCount: workListItemTypes.length, - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.only(left: 21, right: 21), + body: workListItemIndex == null + ? Utils.getNoDataWidget(context) + : SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 40, + child: ListView.separated( + controller: _controller, + itemBuilder: (context, index) { + return Container( + padding: const EdgeInsets.only(left: 21, right: 21, top: 8, bottom: 8), + alignment: Alignment.center, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(6), color: workListItemIndex == index ? MyColors.darkIconColor : MyColors.lightGreyEAColor), + child: ("${workListItemTypes[index].name} ${workListItemTypes[index].value > 0 ? "(${workListItemTypes[index].value})" : ""}") + .toText12(color: workListItemIndex == index ? MyColors.white : MyColors.black), + ).onPress(() { + if (pNotificationType != 1) { + pNotificationType = 1; + } + if (workListItemIndex != index && !workListItemTypes[index].disable) { + workListItemIndex = index; + if (workListItemTypes[index].value == 0) { + workList = []; + itgRequestTypeIndex = null; + } else { + workList = null; + } + setState(() {}); + if (workListItemTypes[index].value > 0) { + getWorkList(); + } + } + }); + }, + separatorBuilder: (context, index) => 8.width, + shrinkWrap: true, + itemCount: workListItemTypes.length, + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.only(left: 21, right: 21), + ), + ).paddingOnly(top: 21, bottom: 21), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + workListItemTypes[workListItemIndex!].fullName.toSectionHeading().paddingOnly(left: 21, right: 21), + LocaleKeys.advancedSearch.tr().toText14(isUnderLine: true, color: MyColors.textMixColor).onPress(() { + openBottomSheet(context); + }).paddingOnly(left: 21, right: 21) + ], + ), + SmartRefresher( + enablePullDown: true, + enablePullUp: false, + header: const MaterialClassicHeader( + color: MyColors.gradiantEndColor, + ), + controller: _refreshController, + onRefresh: _onRefresh, + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + child: itgRequestTypeIndex != null + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // todo this is commented for temporary purpose, have issue when selecting any itg category and click any item showing wrong details + // SizedBox( + // height: 40, + // child: ListView.separated( + // itemBuilder: (context, index) { + // RequestType type = itgFormsModel!.requestType![index]; + // return Container( + // padding: const EdgeInsets.only(left: 21, right: 21, top: 8, bottom: 8), + // alignment: Alignment.center, + // decoration: BoxDecoration(borderRadius: BorderRadius.circular(30), color: itgRequestTypeIndex == index ? MyColors.darkIconColor : MyColors.lightGreyEAColor), + // child: ("${type.requestTypeName}").toText12(color: itgRequestTypeIndex == index ? MyColors.white : MyColors.black), + // ).onPress(() { + // if (itgRequestTypeIndex != index) { + // itgRequestTypeIndex = index; + // setState(() {}); + // } + // }); + // }, + // separatorBuilder: (context, index) => 8.width, + // shrinkWrap: true, + // itemCount: itgFormsModel?.requestType?.length ?? 0, + // scrollDirection: Axis.horizontal, + // padding: const EdgeInsets.only(left: 21, right: 21), + // ), + // ).paddingOnly(top: 16, bottom: 16), + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + return itgRowItem(workListItemTypes[workListItemIndex!], itgFormsModel!.requestType![itgRequestTypeIndex!].requestDetails![index], index); + }, + separatorBuilder: (context, index) => 12.height, + itemCount: itgFormsModel!.requestType![itgRequestTypeIndex!].requestDetails?.length ?? 0, + padding: const EdgeInsets.all(21), + ), + ], + ) + : workList != null + ? ((workList!).isEmpty + ? Utils.getNoDataWidget(context).paddingOnly(top: 100) + : ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + return rowItem(workListItemTypes[workListItemIndex!], workList![index], index); + }, + separatorBuilder: (context, index) => 12.height, + itemCount: workList?.length ?? 0, + padding: const EdgeInsets.all(21), + )) + : const SizedBox(), + )).expanded, + ], ), - ).paddingOnly(top: 21, bottom: 21), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - workListItemTypes[workListItemIndex].fullName.toSectionHeading().paddingOnly(left: 21, right: 21), - LocaleKeys.advancedSearch.tr().toText14(isUnderLine: true, color: MyColors.textMixColor).onPress(() { - openBottomSheet(context); - }).paddingOnly(left: 21, right: 21) - ], ), - SmartRefresher( - enablePullDown: true, - enablePullUp: false, - header: const MaterialClassicHeader( - color: MyColors.gradiantEndColor, - ), - controller: _refreshController, - onRefresh: _onRefresh, - child: SingleChildScrollView( - physics: const BouncingScrollPhysics(), - child: itgRequestTypeIndex != null - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // todo this is commented for temporary purpose, have issue when selecting any itg category and click any item showing wrong details - // SizedBox( - // height: 40, - // child: ListView.separated( - // itemBuilder: (context, index) { - // RequestType type = itgFormsModel!.requestType![index]; - // return Container( - // padding: const EdgeInsets.only(left: 21, right: 21, top: 8, bottom: 8), - // alignment: Alignment.center, - // decoration: BoxDecoration(borderRadius: BorderRadius.circular(30), color: itgRequestTypeIndex == index ? MyColors.darkIconColor : MyColors.lightGreyEAColor), - // child: ("${type.requestTypeName}").toText12(color: itgRequestTypeIndex == index ? MyColors.white : MyColors.black), - // ).onPress(() { - // if (itgRequestTypeIndex != index) { - // itgRequestTypeIndex = index; - // setState(() {}); - // } - // }); - // }, - // separatorBuilder: (context, index) => 8.width, - // shrinkWrap: true, - // itemCount: itgFormsModel?.requestType?.length ?? 0, - // scrollDirection: Axis.horizontal, - // padding: const EdgeInsets.only(left: 21, right: 21), - // ), - // ).paddingOnly(top: 16, bottom: 16), - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - return itgRowItem(workListItemTypes[workListItemIndex], itgFormsModel!.requestType![itgRequestTypeIndex!].requestDetails![index], index); - }, - separatorBuilder: (context, index) => 12.height, - itemCount: itgFormsModel!.requestType![itgRequestTypeIndex!].requestDetails?.length ?? 0, - padding: const EdgeInsets.all(21), - ), - ], - ) - : workList != null - ? ((workList!).isEmpty - ? Utils.getNoDataWidget(context).paddingOnly(top: 100) - : ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - return rowItem(workListItemTypes[workListItemIndex], workList![index], index); - }, - separatorBuilder: (context, index) => 12.height, - itemCount: workList?.length ?? 0, - padding: const EdgeInsets.all(21), - )) - : const SizedBox(), - )).expanded, - ], - ), - ), ); } @@ -350,7 +358,10 @@ class _WorkListScreenState extends State { if (shouldReloadData.toString() == "delegate_reload") { providerData.itgFormsModel!.totalCount = providerData.itgFormsModel!.totalCount! - 1; calculateCounter(); - getWorkList(); + setState(() {}); + if (workListItemIndex != null) { + getWorkList(); + } } // workList!.remove(data); // AppState().setWorkList = workList;