Merge branch 'Fatima' into development_mirza
# Conflicts: # assets/langs/ar-SA.json # assets/langs/en-US.json # lib/extensions/string_extensions.dart # lib/extensions/widget_extensions.dart # lib/generated/codegen_loader.g.dart # lib/ui/landing/dashboard.dart # pubspec.lock # pubspec.yamlmerge-requests/1/merge
						commit
						b898481cf7
					
				| @ -0,0 +1,671 @@ | ||||
| import 'package:easy_localization/src/public_ext.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/painting.dart'; | ||||
| import 'package:mohem_flutter_app/classes/colors.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/int_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/string_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; | ||||
| import 'package:syncfusion_flutter_calendar/calendar.dart'; | ||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:pie_chart/pie_chart.dart'; | ||||
| 
 | ||||
| class MonthlyAttendance extends StatefulWidget { | ||||
|   MonthlyAttendance({Key? key}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   _MonthlyAttendanceState createState() { | ||||
|     return _MonthlyAttendanceState(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class _MonthlyAttendanceState extends State<MonthlyAttendance> { | ||||
|   bool isPresent = true; | ||||
|   bool isAbsent = true; | ||||
|   bool isMissingDays = true; | ||||
|   bool isOffDays = true; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|   } | ||||
| 
 | ||||
|   Map<String, double> dataMap = { | ||||
|     "Present": 65, | ||||
|     "Absent": 35, | ||||
|   }; | ||||
| 
 | ||||
|   final List<Color> _colorList = [Color(0xff2AB2AB), Color(0xff202529)]; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Scaffold( | ||||
|       appBar: AppBar( | ||||
|         backgroundColor: MyColors.white, | ||||
|         leading: IconButton( | ||||
|           icon: const Icon( | ||||
|             Icons.arrow_back_ios, | ||||
|             color: MyColors.backgroundBlackColor, | ||||
|           ), | ||||
|           onPressed: () => Navigator.pop(context), | ||||
|         ), | ||||
|       ), | ||||
|       backgroundColor: Colors.white, | ||||
|       body: ListView( | ||||
|         scrollDirection: Axis.vertical, | ||||
|         children: [ | ||||
|           Column( | ||||
|             children: [ | ||||
|               20.height, | ||||
|               Column( | ||||
|                 crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                 children: [ | ||||
|                   "Attendance".toText24(isBold: true, color: MyColors.darkIconColor), | ||||
|                   Row( | ||||
|                     children: [ | ||||
|                       "June 13, 2021".toText16(color: MyColors.greyACColor), | ||||
|                       const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor), | ||||
|                     ], | ||||
|                   ).onPress(() { | ||||
|                     showDatePicker( | ||||
|                       context: context, | ||||
|                       initialDate: DateTime.now(), | ||||
|                       firstDate: DateTime(2021), | ||||
|                       lastDate: DateTime(2025), | ||||
|                       builder: (context, child) { | ||||
|                         return Theme( | ||||
|                           data: ThemeData.dark().copyWith( | ||||
|                             colorScheme: const ColorScheme.dark( | ||||
|                               primary: MyColors.lightGreenColor, | ||||
|                               onPrimary: MyColors.white, | ||||
|                               surface: MyColors.lightGreenColor, | ||||
|                               onSurface: MyColors.darkTextColor, | ||||
|                             ), | ||||
|                             dialogBackgroundColor: Colors.white, | ||||
|                           ), | ||||
|                           child: child!, | ||||
|                         ); | ||||
|                       }, | ||||
|                     ); | ||||
|                   }) | ||||
|                 ], | ||||
|               ).paddingOnly(left: 21, right: 21), | ||||
|               18.height, | ||||
|               AspectRatio(aspectRatio: 333 / 270, child: calenderWidget()).paddingOnly(left: 21, right: 21), | ||||
|               Row( | ||||
|                 mainAxisAlignment: MainAxisAlignment.start, | ||||
|                 children: [ | ||||
|                   optionUI("Schedule\nDays", "16"), | ||||
|                   6.width, | ||||
|                   optionUI("Off\nDays", "0"), | ||||
|                   6.width, | ||||
|                   optionUI("Non\nAnalyzed", "0"), | ||||
|                   6.width, | ||||
|                   optionUI("Shortage\nHour", "6"), | ||||
|                 ], | ||||
|               ).paddingOnly(left: 21, right: 21), | ||||
|               35.height, | ||||
|               Container( | ||||
|                 width: double.infinity, | ||||
|                 height: 227, | ||||
|                 decoration: BoxDecoration( | ||||
|                   color: Colors.white, | ||||
|                   borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), | ||||
|                   boxShadow: [ | ||||
|                     BoxShadow( | ||||
|                       offset: const Offset(0, 2), | ||||
|                       blurRadius: 26, | ||||
|                       color: MyColors.darkColor.withOpacity(0.1), | ||||
|                     ), | ||||
|                   ], | ||||
|                 ), | ||||
|                 child: Row( | ||||
|                   children: [ | ||||
|                     Column( | ||||
|                       crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                       children: <Widget>[ | ||||
|                         Column( | ||||
|                           children: [ | ||||
|                             "Attendance".toText12(isBold: true, color: MyColors.grey3AColor), | ||||
|                             "Stats".toText24(isBold: true, color: MyColors.grey3AColor), | ||||
|                           ], | ||||
|                         ).paddingOnly(left: 21, top: 29, bottom: 36), | ||||
|                         Row( | ||||
|                           children: [ | ||||
|                             Container( | ||||
|                               height: 9, | ||||
|                               width: 9, | ||||
|                               decoration: BoxDecoration( | ||||
|                                 color: MyColors.lightGreenColor, | ||||
|                                 borderRadius: BorderRadius.circular(100), | ||||
|                               ), | ||||
|                             ), | ||||
|                             Container( | ||||
|                               margin: const EdgeInsets.only(left: 5, right: 5), | ||||
|                               child: "PRESENT 16".toText16(isBold: true, color: MyColors.lightGreenColor), | ||||
|                             ), | ||||
|                           ], | ||||
|                         ).paddingOnly(left: 21, right: 23), | ||||
|                         8.height, | ||||
|                         Row( | ||||
|                           children: [ | ||||
|                             Container( | ||||
|                               height: 9, | ||||
|                               width: 9, | ||||
|                               decoration: BoxDecoration( | ||||
|                                 color: MyColors.backgroundBlackColor, | ||||
|                                 borderRadius: BorderRadius.circular(100), | ||||
|                               ), | ||||
|                             ), | ||||
|                             Container( | ||||
|                               margin: const EdgeInsets.only(left: 5, right: 5), | ||||
|                               child: "ABSENT 04".toText16( | ||||
|                                 isBold: true, | ||||
|                                 color: MyColors.backgroundBlackColor, | ||||
|                               ), | ||||
|                             ) | ||||
|                           ], | ||||
|                         ).paddingOnly(left: 21, top: 8), | ||||
|                       ], | ||||
|                     ), | ||||
|                     Column( | ||||
|                       crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                       children: <Widget>[ | ||||
|                         Container( | ||||
|                           width: 169, | ||||
|                           height: 170, | ||||
|                           child: PieChart( | ||||
|                             dataMap: dataMap, | ||||
|                             animationDuration: const Duration(milliseconds: 800), | ||||
|                             chartLegendSpacing: 0, | ||||
|                             chartRadius: MediaQuery.of(context).size.width / 5.2, | ||||
|                             colorList: _colorList, | ||||
|                             initialAngleInDegree: 0, | ||||
|                             chartType: ChartType.ring, | ||||
|                             ringStrokeWidth: 80, | ||||
|                             legendOptions: const LegendOptions( | ||||
|                               showLegendsInRow: false, | ||||
|                               showLegends: false, | ||||
|                             ), | ||||
|                             chartValuesOptions: const ChartValuesOptions( | ||||
|                                 showChartValueBackground: false, | ||||
|                                 showChartValues: true, | ||||
|                                 showChartValuesInPercentage: true, | ||||
|                                 showChartValuesOutside: false, | ||||
|                                 decimalPlaces: 1, | ||||
|                                 chartValueStyle: TextStyle( | ||||
|                                   fontWeight: FontWeight.bold, | ||||
|                                   fontSize: 16, | ||||
|                                   color: MyColors.white, | ||||
|                                 )), | ||||
|                           ), | ||||
|                         ), | ||||
|                       ], | ||||
|                     ).paddingOnly(left: 65, top: 27, right: 21, bottom: 28), | ||||
|                   ], | ||||
|                 ), | ||||
|               ), | ||||
|             ], | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget optionUI(String title, String value) { | ||||
|     return AspectRatio( | ||||
|       aspectRatio: 1 / 1, | ||||
|       child: Container( | ||||
|         padding: const EdgeInsets.only(top: 10, left: 8, right: 8, bottom: 10), | ||||
|         decoration: BoxDecoration( | ||||
|           color: Colors.white, | ||||
|           borderRadius: BorderRadius.circular(12), | ||||
|           boxShadow: [ | ||||
|             BoxShadow( | ||||
|               offset: const Offset(0, 1), | ||||
|               blurRadius: 15, | ||||
|               color: MyColors.darkColor.withOpacity(0.1), | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|         child: Column( | ||||
|           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|           children:<Widget> [title.toText10(color: MyColors.darkTextColor).expanded, value.toText20(color: MyColors.darkTextColor)], | ||||
|         ), | ||||
|       ), | ||||
|     ).expanded; | ||||
|   } | ||||
| 
 | ||||
|   Widget calenderWidget() { | ||||
|     return SfCalendar( | ||||
|       view: CalendarView.month, | ||||
|       headerHeight: 0, | ||||
|       todayHighlightColor: MyColors.grey3AColor, | ||||
|       viewHeaderStyle: const ViewHeaderStyle( | ||||
|       dayTextStyle: TextStyle(color: MyColors.grey3AColor, fontSize: 13, fontWeight: FontWeight.w600), | ||||
|       ), | ||||
|       monthCellBuilder: (cxt, build) { | ||||
|         int val = build.date.day % 4; | ||||
|         isPresent = val == 0; | ||||
|         isAbsent = val == 1; | ||||
|         isMissingDays = val == 2; | ||||
|         isOffDays = val == 3; | ||||
|         if (isPresent) { | ||||
|           return Container( | ||||
|             margin: const EdgeInsets.all(4), | ||||
|             decoration: BoxDecoration( | ||||
|               gradient: const LinearGradient( | ||||
|                 transform: GradientRotation(.46), | ||||
|                 begin: Alignment.topRight, | ||||
|                 end: Alignment.bottomLeft, | ||||
|                 colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor], | ||||
|               ), | ||||
|               shape: BoxShape.circle, | ||||
|               boxShadow: [ | ||||
|                 BoxShadow( | ||||
|                   offset: const Offset(0, 2), | ||||
|                   blurRadius: 26, | ||||
|                   color: MyColors.blackColor.withOpacity(0.100), | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             alignment: Alignment.center, | ||||
|             child: Text( | ||||
|               "${build.date.day}", | ||||
|                 style: const TextStyle( | ||||
|                 fontSize: 13, | ||||
|                 fontWeight: FontWeight.w500, | ||||
|                 color: MyColors.white, | ||||
|               ), | ||||
|             ), | ||||
|           ); | ||||
|         } else if (isAbsent) { | ||||
|           return Container( | ||||
|             margin: const EdgeInsets.all(4), | ||||
|             decoration: BoxDecoration( | ||||
|               color: MyColors.backgroundBlackColor, | ||||
|               shape: BoxShape.circle, | ||||
|               boxShadow: [ | ||||
|                 BoxShadow( | ||||
|                   offset: const Offset(0, 2), | ||||
|                   blurRadius: 26, | ||||
|                   color: MyColors.blackColor.withOpacity(0.100), | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             alignment: Alignment.center, | ||||
|             child: Text( | ||||
|               "${build.date.day}", | ||||
|                 style: const TextStyle( | ||||
|                 fontSize: 13, | ||||
|                 fontWeight: FontWeight.w500, | ||||
|                 color: MyColors.white, | ||||
|               ), | ||||
|             ), | ||||
|           ); | ||||
|         } else if (isMissingDays) { | ||||
|           return Container( | ||||
|             margin: const EdgeInsets.all(4), | ||||
|             decoration: BoxDecoration( | ||||
|               border: Border.all(color: MyColors.backgroundBlackColor, width: 2.0, style: BorderStyle.solid), //Border.all | ||||
|               shape: BoxShape.circle, | ||||
|               boxShadow: [ | ||||
|                 BoxShadow( | ||||
|                   offset: const Offset(0, 2), | ||||
|                   blurRadius: 26, | ||||
|                   color: MyColors.blackColor.withOpacity(0.100), | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             alignment: Alignment.center, | ||||
|             child: Text( | ||||
|               "${build.date.day}", | ||||
|                 style: const TextStyle( | ||||
|                 fontSize: 13, | ||||
|                 fontWeight: FontWeight.w500, | ||||
|                 color: Color(0xff1F2428), | ||||
|               ), | ||||
|             ), | ||||
|           ); | ||||
|         } else if (isOffDays) { | ||||
|           return Container( | ||||
|             margin: const EdgeInsets.all(4), | ||||
|             decoration: BoxDecoration( | ||||
|               color: MyColors.greyACColor.withOpacity(.12), | ||||
|               shape: BoxShape.circle, | ||||
|             ), | ||||
|             alignment: Alignment.center, | ||||
|             child: Text( | ||||
|               "${build.date.day}", | ||||
|                 style: const TextStyle( | ||||
|                 fontSize: 13, | ||||
|                 fontWeight: FontWeight.w500, | ||||
|                 color: MyColors.greyA5Color, | ||||
|               ), | ||||
|             ), | ||||
|           ); | ||||
|         } else { | ||||
|           return Container(); | ||||
|         } | ||||
|       }, | ||||
|       monthViewSettings: const MonthViewSettings( | ||||
|         dayFormat: 'EEE', | ||||
|         showTrailingAndLeadingDates: false, | ||||
|         appointmentDisplayMode: MonthAppointmentDisplayMode.appointment, | ||||
|         showAgenda: false, | ||||
|         navigationDirection: MonthNavigationDirection.horizontal, | ||||
|         monthCellStyle: MonthCellStyle( | ||||
|           textStyle: TextStyle( | ||||
|             fontStyle: FontStyle.normal, | ||||
|             fontSize: 13, | ||||
|             color: Colors.white, | ||||
|           ), | ||||
|         ), | ||||
|       ), | ||||
|       showNavigationArrow: false, | ||||
|       showDatePickerButton: false, | ||||
|       showCurrentTimeIndicator: false, | ||||
|       showWeekNumber: false, | ||||
|       cellBorderColor: Colors.white, | ||||
|       selectionDecoration: BoxDecoration( | ||||
|         border: Border.all(color: MyColors.white, width: 10), | ||||
|         borderRadius: const BorderRadius.all(Radius.circular(100)), | ||||
|         shape: BoxShape.circle, | ||||
|       ), | ||||
|       dataSource: MeetingDataSource(_getDataSource()), | ||||
|       onTap: calendarTapped, | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   void calendarTapped(CalendarTapDetails details) { | ||||
|     showModalBottomSheet( | ||||
|       context: context, | ||||
|       shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)), | ||||
|       isScrollControlled: true, | ||||
|       backgroundColor: MyColors.backgroundBlackColor, | ||||
|       builder: (_) { | ||||
|         return DraggableScrollableSheet( | ||||
|           maxChildSize: 0.9, | ||||
|           expand: false, | ||||
|           builder: (_, controller) { | ||||
|             return Column( | ||||
|               children: [ | ||||
|                 Container( | ||||
|                   width: 75, | ||||
|                   height: 7, | ||||
|                   margin: const EdgeInsets.symmetric(vertical: 10), | ||||
|                   decoration: BoxDecoration( | ||||
|                     borderRadius: BorderRadius.circular(20), | ||||
|                     color: MyColors.darkGreyColor, | ||||
|                   ), | ||||
|                 ), | ||||
|                 Expanded( | ||||
|                   child: ListView.builder( | ||||
|                     controller: controller, | ||||
|                     itemCount: 1, | ||||
|                     itemBuilder: (_, i) => Container( | ||||
|                       decoration: const BoxDecoration( | ||||
|                         borderRadius: BorderRadius.vertical( | ||||
|                           top: Radius.circular(35.0), | ||||
|                         ), | ||||
|                         color: MyColors.backgroundBlackColor, | ||||
|                       ), | ||||
|                       child: Column( | ||||
|                         crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                         children: [ | ||||
|                           Column(children: [ | ||||
|                             "June 13, 2021".toText24(isBold: true, color: Colors.white), | ||||
|                             LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.lightGreyEFColor), | ||||
|                             21.height, | ||||
|                           ]).paddingOnly(top: 25, left: 21, right: 21, bottom: 10), | ||||
|                           Center( | ||||
|                             child: CircularStepProgressBar( | ||||
|                               totalSteps: 16 * 4, | ||||
|                               currentStep: 16, | ||||
|                               width: 210, | ||||
|                               height: 210, | ||||
|                               selectedColor: MyColors.gradiantEndColor, | ||||
|                               unselectedColor: MyColors.grey70Color, | ||||
|                               child: Center( | ||||
|                                 child: Column( | ||||
|                                   mainAxisSize: MainAxisSize.min, | ||||
|                                   children: [ | ||||
|                                     "99%".toText44(color: Colors.white, isBold: true), | ||||
|                                     "Completed".tr().toText11(color: MyColors.greyACColor), | ||||
|                                     19.height, | ||||
|                                     "Shift Time".tr().toText11(color: MyColors.greyACColor), | ||||
|                                     "08:00 - 17:00".toText22(color: Colors.white, isBold: true), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ), | ||||
|                             ), | ||||
|                           ), | ||||
|                           Container( | ||||
|                             padding: const EdgeInsets.only(top: 20, bottom: 20), | ||||
|                           ), | ||||
|                           Stack( | ||||
|                             children: [ | ||||
|                               Container( | ||||
|                                 height: 5, | ||||
|                                 padding: const EdgeInsets.only(top: 24, bottom: 24), | ||||
|                                 color: MyColors.backgroundBlackColor, | ||||
|                               ), | ||||
|                               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: 21, right: 21, top: 28, bottom: 24), | ||||
|                                 child: Column( | ||||
|                                   children: [ | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         Container( | ||||
|                                           margin: const EdgeInsets.only(right: 30, left: 15), | ||||
|                                           child: Column( | ||||
|                                             crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                             children: [ | ||||
|                                               "Actual Check In ".tr().toText11( | ||||
|                                                     color: MyColors.grey67Color, | ||||
|                                                   ), | ||||
|                                               8.height, | ||||
|                                               "08:27".toText22(color: Colors.black, isBold: true), | ||||
|                                             ], | ||||
|                                           ), | ||||
|                                         ), | ||||
|                                         40.width, | ||||
|                                         Column( | ||||
|                                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                           children: [ | ||||
|                                             "Actual Check Out".tr().toText11( | ||||
|                                                   color: MyColors.grey67Color, | ||||
|                                                 ), | ||||
|                                             8.height, | ||||
|                                             "18:20".toText22(color: Colors.black, isBold: true), | ||||
|                                           ], | ||||
|                                         ), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     const Divider( | ||||
|                                       height: 1, | ||||
|                                       thickness: 1, | ||||
|                                       color: MyColors.whiteColor, | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         Container( | ||||
|                                           margin: const EdgeInsets.only(right: 30, left: 15), | ||||
|                                           child: Column( | ||||
|                                             crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                             children: [ | ||||
|                                               "Approved Check In".tr().toText11( | ||||
|                                                     color: MyColors.grey67Color, | ||||
|                                                   ), | ||||
|                                               8.height, | ||||
|                                               "09:27".toText22(color: MyColors.greenColor, isBold: true), | ||||
|                                             ], | ||||
|                                           ), | ||||
|                                         ), | ||||
|                                         30.width, | ||||
|                                         Column( | ||||
|                                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                           children: [ | ||||
|                                             "Approved Check Out".tr().toText11( | ||||
|                                                   color: MyColors.grey67Color, | ||||
|                                                 ), | ||||
|                                             8.height, | ||||
|                                             "18:20".toText22(color: MyColors.greenColor, isBold: true), | ||||
|                                           ], | ||||
|                                         ), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     const Divider( | ||||
|                                       height: 1, | ||||
|                                       thickness: 1, | ||||
|                                       color: MyColors.whiteColor, | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         Container( | ||||
|                                           margin: const EdgeInsets.only(right: 30, left: 15), | ||||
|                                           child: Column( | ||||
|                                             crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                             children: [ | ||||
|                                               "Late In".tr().toText11( | ||||
|                                                     color: MyColors.grey67Color, | ||||
|                                                   ), | ||||
|                                               8.height, | ||||
|                                               "00:27".toText22(color: MyColors.redColor, isBold: true), | ||||
|                                             ], | ||||
|                                           ), | ||||
|                                         ), | ||||
|                                         80.width, | ||||
|                                         Column( | ||||
|                                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                           children: [ | ||||
|                                             "Excess".tr().toText11( | ||||
|                                                   color: MyColors.grey67Color, | ||||
|                                                 ), | ||||
|                                             8.height, | ||||
|                                             "00:00".toText22(color: Colors.black, isBold: true), | ||||
|                                           ], | ||||
|                                         ), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     const Divider( | ||||
|                                       height: 1, | ||||
|                                       thickness: 1, | ||||
|                                       color: MyColors.whiteColor, | ||||
|                                     ), | ||||
|                                     25.height, | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         Container( | ||||
|                                           margin: const EdgeInsets.only(right: 30, left: 15), | ||||
|                                           child: Column( | ||||
|                                             crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                             children: [ | ||||
|                                               "Shortage".tr().toText11( | ||||
|                                                     color: MyColors.grey67Color, | ||||
|                                                   ), | ||||
|                                               8.height, | ||||
|                                               "00:00".toText22(color: Colors.black, isBold: true), | ||||
|                                             ], | ||||
|                                           ), | ||||
|                                         ), | ||||
|                                         80.width, | ||||
|                                         Column( | ||||
|                                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                           children: [ | ||||
|                                             "Early Out".tr().toText11( | ||||
|                                                   color: MyColors.grey67Color, | ||||
|                                                 ), | ||||
|                                             8.height, | ||||
|                                             "00:00".toText22(color: Colors.black, isBold: true), | ||||
|                                           ], | ||||
|                                         ), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ), | ||||
|                             ], | ||||
|                           ), | ||||
|                         ], | ||||
|                       ), | ||||
|                     ), | ||||
|                   ), | ||||
|                 ), | ||||
|               ], | ||||
|             ); | ||||
|           }, | ||||
|         ); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   List<Meeting> _getDataSource() { | ||||
|     final List<Meeting> meetings = <Meeting>[]; | ||||
| 
 | ||||
|     // _events.forEach((key, value) { | ||||
|     //   final DateTime startTime = DateTime(key.year, key.month, key.day, 21, 0, 0); | ||||
|     //   final DateTime endTime = DateTime(key.year, key.month, key.day, 22, 0, 0); | ||||
|     //   meetings.add(Meeting("", startTime, endTime, MyColors.backgroundBlackColor, false)); | ||||
|     // }); | ||||
|     return meetings; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class MeetingDataSource extends CalendarDataSource { | ||||
|   MeetingDataSource(List<Meeting> source) { | ||||
|     appointments = source; | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   DateTime getStartTime(int index) { | ||||
|     return _getMeetingData(index).from; | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   DateTime getEndTime(int index) { | ||||
|     return _getMeetingData(index).to; | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   String getSubject(int index) { | ||||
|     return _getMeetingData(index).eventName; | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Color getColor(int index) { | ||||
|     return _getMeetingData(index).background; | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   bool isAllDay(int index) { | ||||
|     return _getMeetingData(index).isAllDay; | ||||
|   } | ||||
| 
 | ||||
|   Meeting _getMeetingData(int index) { | ||||
|     final dynamic meeting = appointments; | ||||
|     Meeting meetingData; | ||||
|     if (meeting is Meeting) { | ||||
|       meetingData = meeting; | ||||
|     } | ||||
|     return meeting; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class Meeting { | ||||
|   Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay); | ||||
| 
 | ||||
|   String eventName; | ||||
|   DateTime from; | ||||
|   DateTime to; | ||||
|   Color background; | ||||
|   bool isAllDay; | ||||
| } | ||||
| @ -0,0 +1,228 @@ | ||||
| import 'package:easy_localization/src/public_ext.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_svg/flutter_svg.dart'; | ||||
| import 'package:mohem_flutter_app/classes/colors.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/int_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/string_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; | ||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; | ||||
| 
 | ||||
| class AttendenceDetailsBottomSheet extends StatefulWidget { | ||||
| 
 | ||||
|   AttendenceDetailsBottomSheet({Key? key}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   _AttendenceDetailsBottomSheetState createState() => _AttendenceDetailsBottomSheetState(); | ||||
| } | ||||
| 
 | ||||
| class _AttendenceDetailsBottomSheetState extends State<AttendenceDetailsBottomSheet> { | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void dispose() { | ||||
|     super.dispose(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Scaffold( | ||||
|         bottomSheet:BottomSheet( | ||||
| 
 | ||||
|         onClosing: () => print("not getting called"), | ||||
|          builder: (_) => Container( | ||||
|            color: Colors.red, | ||||
|           height: MediaQuery.of(context).size.height*0.9, | ||||
|           child: Column( | ||||
|             children: [ | ||||
|               Container( | ||||
|                 decoration: BoxDecoration( | ||||
|                   borderRadius: BorderRadius.vertical( top: Radius.circular(25.0),), | ||||
|                   color: MyColors.backgroundBlackColor, | ||||
|                 ), | ||||
|                 margin:EdgeInsets.only(top: 45) , | ||||
|                 padding: EdgeInsets.only(left: 11, right: 11, bottom: 21), | ||||
|                 child: Column( | ||||
|                   crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                   children: [ | ||||
|                     Center( | ||||
|                       child: Padding( | ||||
|                         padding: const EdgeInsets.all(10), | ||||
|                         child: Container( | ||||
|                           margin:EdgeInsets.only(top: 5) , | ||||
|                           decoration: BoxDecoration( | ||||
|                             borderRadius: BorderRadius.all(Radius.circular(35.0),), | ||||
|                             color: Color(0xff464646), | ||||
|                           ), | ||||
|                           width: 80, | ||||
|                           height: 6, | ||||
|                         ), | ||||
|                       ), | ||||
|                     ), | ||||
|                     Container( | ||||
|                       padding: EdgeInsets.only(top: 25,left: 11, right: 11, bottom: 10), | ||||
|                       child: Column(children: [ | ||||
|                         "June 13, 2021".toText24(isBold: true, color: Colors.white), | ||||
|                         LocaleKeys.attendanceDetails.tr().toText16(color: Color(0xffACACAC)), | ||||
|                        // LocaleKeys.timeLeftToday.tr().toText16(color: Color(0xffACACAC)), | ||||
|                         21.height, | ||||
|                       ] ), | ||||
|                     ), | ||||
|                     Center( | ||||
|                       child: CircularStepProgressBar( | ||||
|                         totalSteps: 16 * 4, | ||||
|                         currentStep: 16, | ||||
|                         width: 210, | ||||
|                         height: 210, | ||||
|                         selectedColor: MyColors.gradiantEndColor, | ||||
|                         unselectedColor: MyColors.grey70Color, | ||||
|                         child: Center( | ||||
|                           child: Column( | ||||
|                             mainAxisSize: MainAxisSize.min, | ||||
|                             children: [ | ||||
|                               "99%".toText32(color: Colors.white, isBold: true), | ||||
|                               "Completed".tr().toText12(color: MyColors.greyACColor), | ||||
|                               19.height, | ||||
|                               "Shift Time".tr().toText12(color: MyColors.greyACColor), | ||||
|                               "08:00 - 17:00".toText22(color: Colors.white, isBold: true), | ||||
|                             ], | ||||
|                           ), | ||||
|                         ), | ||||
|                       ), | ||||
|                     ), | ||||
|                   ], | ||||
|                 ), | ||||
|               ), | ||||
|               Stack( | ||||
|                   children: [ | ||||
|                     Container( | ||||
|                       height: 32, | ||||
|                       // padding: EdgeInsets.only(top: 24, bottom: 24), | ||||
|                       color: MyColors.backgroundBlackColor, | ||||
|                     ), | ||||
|                     Container( | ||||
|                       width: double.infinity, | ||||
|                       decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), | ||||
|                       margin: EdgeInsets.only(top: 10), | ||||
|                       padding: EdgeInsets.only(left: 21, right: 21, top: 24, bottom: 24), | ||||
|                       child: Row( | ||||
|                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                           mainAxisAlignment: MainAxisAlignment.spaceAround, | ||||
|                           children:[ | ||||
|                             Row( | ||||
|                               children: [ | ||||
|                                 Column( | ||||
|                                   crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                   children: [ | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "Actual Check In ".tr().toText12(color: MyColors.black), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "08:27".toText22(color: Colors.black, isBold: true), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "Approved Check In".tr().toText12(color: MyColors.black), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "09:27".toText22(color: Color(0xff1FA269), isBold: true), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "Late In".tr().toText12(color: MyColors.black), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "00:27".toText22(color: Color(0xffD02127), isBold: true), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: [ "Shortage".tr().toText12(color: MyColors.black), | ||||
|                                    ] ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "00:00".toText22(color: Colors.black, isBold: true),], | ||||
|                                     ), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ], | ||||
|                             ), | ||||
|                             Row( | ||||
|                               children: [ | ||||
|                                 Column( | ||||
|                                   crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                   children: [ | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "Actual Check Out".tr().toText12(color: MyColors.black), | ||||
|                                        ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "18:20".toText22(color: Colors.black, isBold: true),], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: [ "Approved Check Out".tr().toText12(color: MyColors.black), | ||||
|                                       ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "18:20".toText22(color: Color(0xff1FA269), isBold: true),], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: ["Excess".tr().toText12(color: MyColors.black), | ||||
|                                      ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "00:00".toText22(color: Colors.black, isBold: true),], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 30,), | ||||
|                                     Row( | ||||
|                                       children: ["Early Out".tr().toText12(color: MyColors.black), | ||||
|                                         ], | ||||
|                                     ), | ||||
|                                     SizedBox(height: 8,), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         "00:00".toText22(color: Colors.black, isBold: true),], | ||||
|                                     ), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ], | ||||
|                             ), | ||||
|                           ] ), | ||||
|                     ), | ||||
|                   ]), | ||||
|             ], | ||||
|           ), | ||||
|         ) | ||||
|         )); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,478 @@ | ||||
| import 'package:easy_localization/src/public_ext.dart'; | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_svg/flutter_svg.dart'; | ||||
| import 'package:mohem_flutter_app/classes/colors.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'; | ||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; | ||||
| import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class Dashboard extends StatefulWidget { | ||||
|   Dashboard({Key? key}) : super(key: key); | ||||
| 
 | ||||
|   @override | ||||
|   _DashboardState createState() { | ||||
|     return _DashboardState(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class _DashboardState extends State<Dashboard> { | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void dispose() { | ||||
|     super.dispose(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     List<String> names = [ | ||||
|       LocaleKeys.workList.tr(), | ||||
|       LocaleKeys.missingSwipes.tr(), | ||||
|       LocaleKeys.leaveBalance.tr(), | ||||
|       LocaleKeys.ticketBalance.tr() | ||||
|     ]; | ||||
|     List<double> namesInt = [118, 02, 18.5, 03]; | ||||
|     List<int> namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA]; | ||||
| 
 | ||||
|     List<String> namesT = [ | ||||
|       LocaleKeys.monthlyAttendance.tr(), | ||||
|       LocaleKeys.workFromHome.tr(), | ||||
|       LocaleKeys.ticketRequest.tr(), | ||||
|       LocaleKeys.monthlyAttendance.tr() | ||||
|     ]; | ||||
|     List<String> iconT = [ | ||||
|       "assets/images/monthly_attendance.svg", | ||||
|       "assets/images/work_from_home.svg", | ||||
|       "assets/images/ticket_request.svg", | ||||
|       "assets/images/work_from_home.svg" | ||||
|     ]; | ||||
| 
 | ||||
|     List<String> namesD = [ | ||||
|       "Nostalgia Perfume Perfume", | ||||
|       "Al Nafoura", | ||||
|       "AlJadi", | ||||
|       "Nostalgia Perfume" | ||||
|     ]; | ||||
| 
 | ||||
|     return Scaffold( | ||||
|       body: Column( | ||||
|         children: [ | ||||
|           Row( | ||||
|             children: [ | ||||
|               Row( | ||||
|                 mainAxisSize: MainAxisSize.min, | ||||
|                 children: [ | ||||
|                   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(() {}), | ||||
|               Expanded( | ||||
|                 child: Row( | ||||
|                   crossAxisAlignment: CrossAxisAlignment.center, | ||||
|                   mainAxisAlignment: MainAxisAlignment.center, | ||||
|                   mainAxisSize: MainAxisSize.min, | ||||
|                   children: [ | ||||
|                     //AppLogo(), | ||||
|                     8.width, | ||||
|                     LocaleKeys.mohemm.tr().toText14() | ||||
|                   ], | ||||
|                 ), | ||||
|               ), | ||||
|               SizedBox( | ||||
|                 width: 36, | ||||
|                 height: 36, | ||||
|                 child: Stack( | ||||
|                   alignment: Alignment.centerLeft, | ||||
|                   children: [ | ||||
|                     SvgPicture.asset("assets/images/announcements.svg"), | ||||
|                     Positioned( | ||||
|                       right: 0, | ||||
|                       top: 0, | ||||
|                       child: Container( | ||||
|                         padding: const EdgeInsets.only(left: 5, right: 5), | ||||
|                         decoration: BoxDecoration( | ||||
|                             color: MyColors.redColor, | ||||
|                             borderRadius: BorderRadius.circular(17)), | ||||
|                         child: "3".toText12(color: Colors.white), | ||||
|                       ), | ||||
|                     ) | ||||
|                   ], | ||||
|                 ), | ||||
|               ) | ||||
|             ], | ||||
|           ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), | ||||
|           Expanded( | ||||
|             child: ListView( | ||||
|               padding: EdgeInsets.zero, | ||||
|               children: [ | ||||
|                 Column( | ||||
|                   crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                   children: [ | ||||
|                     LocaleKeys.goodMorning | ||||
|                         .tr() | ||||
|                         .toText14(color: MyColors.grey77Color), | ||||
|                     "Mahmoud Shrouf".toText24(isBold: true), | ||||
|                     16.height, | ||||
|                     Row( | ||||
|                       children: [ | ||||
|                         Expanded( | ||||
|                           child: AspectRatio( | ||||
|                             aspectRatio: 159 / 159, | ||||
|                             child: Container( | ||||
|                               decoration: BoxDecoration( | ||||
|                                 borderRadius: BorderRadius.circular(15), | ||||
|                                 gradient: const LinearGradient( | ||||
|                                     transform: GradientRotation(.46), | ||||
|                                     begin: Alignment.topRight, | ||||
|                                     end: Alignment.bottomRight, | ||||
|                                     colors: [ | ||||
|                                       MyColors.gradiantEndColor, | ||||
|                                       MyColors.gradiantStartColor, | ||||
|                                     ]), | ||||
|                               ), | ||||
|                               child: Stack( | ||||
|                                 alignment: Alignment.center, | ||||
|                                 children: [ | ||||
|                                   SvgPicture.asset("assets/images/"), | ||||
|                                   Column( | ||||
|                                     crossAxisAlignment: | ||||
|                                         CrossAxisAlignment.start, | ||||
|                                     children: [ | ||||
|                                       Expanded( | ||||
|                                         child: Column( | ||||
|                                           mainAxisSize: MainAxisSize.min, | ||||
|                                           crossAxisAlignment: | ||||
|                                               CrossAxisAlignment.start, | ||||
|                                           children: [ | ||||
|                                             LocaleKeys.markAttendance | ||||
|                                                 .tr() | ||||
|                                                 .toText14( | ||||
|                                                     color: Colors.white, | ||||
|                                                     isBold: true), | ||||
|                                             9.height, | ||||
|                                             "07:55:12".toText14( | ||||
|                                                 color: Colors.white, | ||||
|                                                 isBold: true), | ||||
|                                             LocaleKeys.timeLeftToday | ||||
|                                                 .tr() | ||||
|                                                 .toText12(color: Colors.white), | ||||
|                                             9.height, | ||||
|                                             const ClipRRect( | ||||
|                                               borderRadius: BorderRadius.all( | ||||
|                                                 Radius.circular(20), | ||||
|                                               ), | ||||
|                                               child: LinearProgressIndicator( | ||||
|                                                 value: 0.7, | ||||
|                                                 minHeight: 8, | ||||
|                                                 valueColor: | ||||
|                                                     const AlwaysStoppedAnimation< | ||||
|                                                         Color>(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), | ||||
|                                                 "09:00".toText14( | ||||
|                                                     color: Colors.white, | ||||
|                                                     isBold: true), | ||||
|                                                 4.height | ||||
|                                               ], | ||||
|                                             ).paddingOnly(left: 12), | ||||
|                                           ), | ||||
|                                           Container( | ||||
|                                             width: 45, | ||||
|                                             height: 45, | ||||
|                                             padding: const EdgeInsets.only( | ||||
|                                                 left: 14, right: 14), | ||||
|                                             decoration: const BoxDecoration( | ||||
|                                               color: Color(0xff259EA4), | ||||
|                                               borderRadius: BorderRadius.only( | ||||
|                                                 bottomRight: | ||||
|                                                     Radius.circular(15), | ||||
|                                               ), | ||||
|                                             ), | ||||
|                                             child: SvgPicture.asset( | ||||
|                                                 "assets/images/stop.svg"), | ||||
|                                           ), | ||||
|                                         ], | ||||
|                                       ), | ||||
|                                     ], | ||||
|                                   ), | ||||
|                                 ], | ||||
|                               ), | ||||
|                             ).onPress(() { | ||||
|                               Navigator.pushNamed( | ||||
|                                   context, AppRoutes.todayAttendance); | ||||
|                             }), | ||||
|                           ), | ||||
|                         ), | ||||
|                         9.width, | ||||
|                         Expanded( | ||||
|                           child: GridView.builder( | ||||
|                             shrinkWrap: true, | ||||
|                             primary: false, | ||||
|                             physics: const NeverScrollableScrollPhysics(), | ||||
|                             gridDelegate: | ||||
|                                 const SliverGridDelegateWithFixedCrossAxisCount( | ||||
|                                     crossAxisCount: 2, | ||||
|                                     childAspectRatio: 2 / 2, | ||||
|                                     crossAxisSpacing: 9, | ||||
|                                     mainAxisSpacing: 9), | ||||
|                             padding: EdgeInsets.zero, | ||||
|                             itemCount: 4, | ||||
|                             itemBuilder: (BuildContext context, int index) { | ||||
|                               return Container( | ||||
|                                 decoration: BoxDecoration( | ||||
|                                   color: Color(namesColor[index]), | ||||
|                                   borderRadius: BorderRadius.circular(10), | ||||
|                                 ), | ||||
|                                 child: Column( | ||||
|                                   mainAxisAlignment: | ||||
|                                       MainAxisAlignment.spaceBetween, | ||||
|                                   crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                   children: [ | ||||
|                                     names[index].toText12(color: Colors.white), | ||||
|                                     Row( | ||||
|                                       children: [ | ||||
|                                         Expanded( | ||||
|                                           child: namesInt[index] | ||||
|                                               .toStringAsFixed(1) | ||||
|                                               .toText16( | ||||
|                                                   color: Colors.white, | ||||
|                                                   isBold: true), | ||||
|                                         ), | ||||
|                                         SvgPicture.asset( | ||||
|                                             "assets/images/arrow_next.svg", | ||||
|                                             color: Colors.white) | ||||
|                                       ], | ||||
|                                     ) | ||||
|                                   ], | ||||
|                                 ).paddingOnly( | ||||
|                                     left: 10, right: 10, bottom: 6, top: 6), | ||||
|                               ).onPress(() { | ||||
|                                 Navigator.pushNamed( | ||||
|                                     context, AppRoutes.workList); | ||||
|                               }); | ||||
|                             }, | ||||
|                           ), | ||||
|                         ), | ||||
|                       ], | ||||
|                     ), | ||||
|                     20.height, | ||||
|                     Row( | ||||
|                       crossAxisAlignment: CrossAxisAlignment.center, | ||||
|                       children: [ | ||||
|                         Expanded( | ||||
|                           child: Column( | ||||
|                             crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                             mainAxisSize: MainAxisSize.min, | ||||
|                             children: [ | ||||
|                               "Other".tr().toText12(), | ||||
|                               LocaleKeys.services.tr().toText24(isBold: true), | ||||
|                             ], | ||||
|                           ), | ||||
|                         ), | ||||
|                         LocaleKeys.viewAllServices | ||||
|                             .tr() | ||||
|                             .toText12(isUnderLine: true), | ||||
|                       ], | ||||
|                     ), | ||||
|                   ], | ||||
|                 ).paddingOnly(left: 21, right: 21, top: 7), | ||||
|                 SizedBox( | ||||
|                   height: 105 + 26, | ||||
|                   child: ListView.separated( | ||||
|                       shrinkWrap: true, | ||||
|                       physics: const BouncingScrollPhysics(), | ||||
|                       padding: const EdgeInsets.only( | ||||
|                           left: 21, right: 21, top: 13, bottom: 13), | ||||
|                       scrollDirection: Axis.horizontal, | ||||
|                       itemBuilder: (cxt, index) { | ||||
|                         return AspectRatio( | ||||
|                           aspectRatio: 105 / 105, | ||||
|                           child: Container( | ||||
|                             decoration: BoxDecoration( | ||||
|                               color: Colors.white, | ||||
|                               borderRadius: BorderRadius.circular(15), | ||||
|                               boxShadow: [ | ||||
|                                 BoxShadow( | ||||
|                                   color: | ||||
|                                       const Color(0xff000000).withOpacity(.05), | ||||
|                                   blurRadius: 26, | ||||
|                                   offset: const Offset(0, -3), | ||||
|                                 ), | ||||
|                               ], | ||||
|                             ), | ||||
|                             child: Column( | ||||
|                               mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||
|                               crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                               children: [ | ||||
|                                 SvgPicture.asset(iconT[index]), | ||||
|                                 Row( | ||||
|                                   crossAxisAlignment: CrossAxisAlignment.end, | ||||
|                                   children: [ | ||||
|                                     Expanded( | ||||
|                                       child: | ||||
|                                           namesT[index].toText11(isBold: true), | ||||
|                                     ), | ||||
|                                     SvgPicture.asset( | ||||
|                                             "assets/images/arrow_next.svg") | ||||
|                                         .paddingOnly(bottom: 4) | ||||
|                                   ], | ||||
|                                 ) | ||||
|                               ], | ||||
|                             ).paddingOnly( | ||||
|                                 left: 10, right: 10, bottom: 10, top: 12), | ||||
|                           ), | ||||
|                         ); | ||||
|                       }, | ||||
|                       separatorBuilder: (cxt, index) => 9.width, | ||||
|                       itemCount: 4), | ||||
|                 ), | ||||
|                 8.height, | ||||
|                 Container( | ||||
|                   width: double.infinity, | ||||
|                   padding: EdgeInsets.only(top: 31), | ||||
|                   decoration: BoxDecoration( | ||||
|                     color: Colors.white, | ||||
|                     borderRadius: BorderRadius.only( | ||||
|                         topRight: Radius.circular(50), | ||||
|                         topLeft: Radius.circular(50)), | ||||
|                     border: | ||||
|                         Border.all(color: MyColors.lightGreyEDColor, width: 1), | ||||
|                   ), | ||||
|                   child: Column( | ||||
|                     mainAxisSize: MainAxisSize.min, | ||||
|                     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), | ||||
|                         ], | ||||
|                       ).paddingOnly(left: 21, right: 21).onPress(() { | ||||
|                         Navigator.pushNamed( | ||||
|                             context, AppRoutes.monthlyAttendance); | ||||
|                   }), | ||||
|                       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: (cxt, index) { | ||||
|                               return 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.lightGreyEDColor, | ||||
|                                             width: 1), | ||||
|                                       ), | ||||
|                                       child: ClipRRect( | ||||
|                                         borderRadius: const BorderRadius.all( | ||||
|                                           Radius.circular(50), | ||||
|                                         ), | ||||
|                                         child: Image.network( | ||||
|                                           "https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo", | ||||
|                                           fit: BoxFit.cover, | ||||
|                                         ), | ||||
|                                       ), | ||||
|                                     ), | ||||
|                                     4.height, | ||||
|                                     Expanded( | ||||
|                                         child: namesD[6 % (index + 1)].toText12( | ||||
|                                             isCenter: true, maxLine: 2)), | ||||
|                                   ], | ||||
|                                 ), | ||||
|                               ); | ||||
|                             }, | ||||
|                             separatorBuilder: (cxt, index) => 8.width, | ||||
|                             itemCount: 6), | ||||
|                       ), | ||||
|                     ], | ||||
|                   ), | ||||
|                 ) | ||||
|               ], | ||||
|             ), | ||||
|           ) | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue