|  |  |  | import 'dart:convert'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'package:easy_localization/src/public_ext.dart'; | 
					
						
							|  |  |  | import 'package:flutter/cupertino.dart'; | 
					
						
							|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; | 
					
						
							|  |  |  | import 'package:flutter_svg/flutter_svg.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/api/dashboard_api_client.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/models/dashboard/get_attendance_tracking_list_model.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/models/dashboard/menus.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/theme/colors.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/ui/landing/widget/menus_widget.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; | 
					
						
							|  |  |  | import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; | 
					
						
							|  |  |  | import 'package:provider/provider.dart'; | 
					
						
							|  |  |  | import 'package:shimmer/shimmer.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import '../../main.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DashboardScreen extends StatefulWidget { | 
					
						
							|  |  |  |   DashboardScreen({Key? key}) : super(key: key); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   _DashboardScreenState createState() { | 
					
						
							|  |  |  |     return _DashboardScreenState(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _DashboardScreenState extends State<DashboardScreen> { | 
					
						
							|  |  |  |   late var data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void initState() { | 
					
						
							|  |  |  |     super.initState(); | 
					
						
							|  |  |  |     data = Provider.of<DashboardProviderModel>(context, listen: false); | 
					
						
							|  |  |  |     data.fetchAttendanceTracking(); | 
					
						
							|  |  |  |     data.fetchWorkListCounter(); | 
					
						
							|  |  |  |     data.fetchMissingSwipe(); | 
					
						
							|  |  |  |     data.fetchLeaveTicketBalance(); | 
					
						
							|  |  |  |     // data.fetchMenuEntries();
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void dispose() { | 
					
						
							|  |  |  |     super.dispose(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     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), | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                   ], | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ).onPress(() { | 
					
						
							|  |  |  |                 data.update(); | 
					
						
							|  |  |  |               }) | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), | 
					
						
							|  |  |  |           Expanded( | 
					
						
							|  |  |  |             child: Column( | 
					
						
							|  |  |  |               // padding: EdgeInsets.zero,
 | 
					
						
							|  |  |  |               // physics: NeverScrollableScrollPhysics(),
 | 
					
						
							|  |  |  |               children: [ | 
					
						
							|  |  |  |                 Expanded( | 
					
						
							|  |  |  |                   child: SingleChildScrollView( | 
					
						
							|  |  |  |                     child: Column( | 
					
						
							|  |  |  |                       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: Consumer<DashboardProviderModel>( | 
					
						
							|  |  |  |                                         builder: (context, model, child) { | 
					
						
							|  |  |  |                                           return (model.isAttendanceTrackingLoading | 
					
						
							|  |  |  |                                                   ? GetAttendanceTrackingShimmer() | 
					
						
							|  |  |  |                                                   : 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: [ | 
					
						
							|  |  |  |                                                           if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"), | 
					
						
							|  |  |  |                                                           Column( | 
					
						
							|  |  |  |                                                             crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |                                                             children: [ | 
					
						
							|  |  |  |                                                               Expanded( | 
					
						
							|  |  |  |                                                                 child: Column( | 
					
						
							|  |  |  |                                                                   mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |                                                                   crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |                                                                   children: [ | 
					
						
							|  |  |  |                                                                     LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true), | 
					
						
							|  |  |  |                                                                     if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white), | 
					
						
							|  |  |  |                                                                     if (model.isTimeRemainingInSeconds != 0) | 
					
						
							|  |  |  |                                                                       Column( | 
					
						
							|  |  |  |                                                                         mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |                                                                         crossAxisAlignment: CrossAxisAlignment.start, | 
					
						
							|  |  |  |                                                                         children: [ | 
					
						
							|  |  |  |                                                                           9.height, | 
					
						
							|  |  |  |                                                                           CountdownTimer( | 
					
						
							|  |  |  |                                                                             endTime: model.endTime, | 
					
						
							|  |  |  |                                                                             onEnd: null, | 
					
						
							|  |  |  |                                                                             endWidget: "00:00:00".toText14(color: Colors.white, isBold: true), | 
					
						
							|  |  |  |                                                                             textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold), | 
					
						
							|  |  |  |                                                                           ), | 
					
						
							|  |  |  |                                                                           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), | 
					
						
							|  |  |  |                                                                         (model.isTimeRemainingInSeconds == 0 ? "--:--" : "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(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"), | 
					
						
							|  |  |  |                                                                   ), | 
					
						
							|  |  |  |                                                                 ], | 
					
						
							|  |  |  |                                                               ), | 
					
						
							|  |  |  |                                                             ], | 
					
						
							|  |  |  |                                                           ), | 
					
						
							|  |  |  |                                                         ], | 
					
						
							|  |  |  |                                                       ), | 
					
						
							|  |  |  |                                                     ).onPress(() { | 
					
						
							|  |  |  |                                                       Navigator.pushNamed(context, AppRoutes.todayAttendance); | 
					
						
							|  |  |  |                                                     })) | 
					
						
							|  |  |  |                                               .animatedSwither(); | 
					
						
							|  |  |  |                                         }, | 
					
						
							|  |  |  |                                       )), | 
					
						
							|  |  |  |                                 ), | 
					
						
							|  |  |  |                                 9.width, | 
					
						
							|  |  |  |                                 Expanded( | 
					
						
							|  |  |  |                                   child: MenusWidget(), | 
					
						
							|  |  |  |                                 ), | 
					
						
							|  |  |  |                               ], | 
					
						
							|  |  |  |                             ), | 
					
						
							|  |  |  |                             20.height, | 
					
						
							|  |  |  |                           ], | 
					
						
							|  |  |  |                         ).paddingOnly(left: 21, right: 21, top: 7), | 
					
						
							|  |  |  |                         ServicesWidget(), | 
					
						
							|  |  |  |                         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), | 
					
						
							|  |  |  |                       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), | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |               ], | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |