You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			326 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			326 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Dart
		
	
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/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/provider/dashboard_provider_model.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';
 | 
						|
 | 
						|
class DashboardScreen extends StatefulWidget {
 | 
						|
  DashboardScreen({Key? key}) : super(key: key);
 | 
						|
 | 
						|
  @override
 | 
						|
  _DashboardScreenState createState() {
 | 
						|
    return _DashboardScreenState();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class _DashboardScreenState extends State<DashboardScreen> {
 | 
						|
  late DashboardProviderModel data;
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    super.initState();
 | 
						|
    data = Provider.of<DashboardProviderModel>(context, listen: false);
 | 
						|
    data.fetchAttendanceTracking();
 | 
						|
    data.fetchWorkListCounter(context);
 | 
						|
    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.bottomLeft, colors: [
 | 
						|
                                                        MyColors.gradiantEndColor,
 | 
						|
                                                        MyColors.gradiantStartColor,
 | 
						|
                                                      ]),
 | 
						|
                                                    ),
 | 
						|
                                                    child: Stack(
 | 
						|
                                                      alignment: Alignment.center,
 | 
						|
                                                      children: [
 | 
						|
                                                        if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
 | 
						|
                                                        Column(
 | 
						|
                                                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                                                          children: [
 | 
						|
                                                            Expanded(
 | 
						|
                                                              child: Column(
 | 
						|
                                                                mainAxisSize: MainAxisSize.min,
 | 
						|
                                                                crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                                                                children: [
 | 
						|
                                                                  LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
 | 
						|
                                                                  if (model.isTimeRemainingInSeconds == 0) "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),
 | 
						|
                      ),
 | 
						|
                    ],
 | 
						|
                  ),
 | 
						|
                )
 | 
						|
              ],
 | 
						|
            ),
 | 
						|
          )
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |