|
|
|
@ -95,64 +95,76 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen> {
|
|
|
|
|
? Center(child: CircularProgressIndicator())
|
|
|
|
|
: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
color: MyColors.backgroundBlackColor,
|
|
|
|
|
padding: EdgeInsets.only(top: 4, left: 21, right: 21, bottom: 21),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
DateUtil.getWeekDayMonthDayYearDateFormatted(DateTime.now(), "en").toText24(isBold: true, color: Colors.white),
|
|
|
|
|
LocaleKeys.timeLeftToday.tr().toText16(color: Color(0xffACACAC)),
|
|
|
|
|
//21.height,
|
|
|
|
|
Center(
|
|
|
|
|
child: AspectRatio(
|
|
|
|
|
aspectRatio: 265 / 265,
|
|
|
|
|
child: CircularStepProgressBar(
|
|
|
|
|
totalSteps: 16 * 4,
|
|
|
|
|
currentStep: (model.progress * 100).toInt(),
|
|
|
|
|
//width: 216,
|
|
|
|
|
// height: 216,
|
|
|
|
|
selectedColor: MyColors.gradiantEndColor,
|
|
|
|
|
unselectedColor: MyColors.grey70Color,
|
|
|
|
|
child: Center(
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
children: [
|
|
|
|
|
CountdownTimer(
|
|
|
|
|
endTime: model.endTime,
|
|
|
|
|
onEnd: null,
|
|
|
|
|
endWidget: "00:00:00".toText32(color: Colors.white, isBold: true),
|
|
|
|
|
textStyle: TextStyle(color: Colors.white, fontSize: 32, letterSpacing: -1.92, fontWeight: FontWeight.bold, height: 1),
|
|
|
|
|
Expanded(
|
|
|
|
|
flex: 2,
|
|
|
|
|
child: Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
color: MyColors.backgroundBlackColor,
|
|
|
|
|
padding: EdgeInsets.only(top: 4, left: 21, right: 21, bottom: 21),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
DateUtil.getWeekDayMonthDayYearDateFormatted(DateTime.now(), "en").toText24(isBold: true, color: Colors.white),
|
|
|
|
|
LocaleKeys.timeLeftToday.tr().toText16(color: Color(0xffACACAC)),
|
|
|
|
|
Center(
|
|
|
|
|
child: AspectRatio(
|
|
|
|
|
aspectRatio: 265 / 265,
|
|
|
|
|
child: CircularStepProgressBar(
|
|
|
|
|
totalSteps: 16 * 4,
|
|
|
|
|
currentStep: (model.progress * 100).toInt(),
|
|
|
|
|
selectedColor: MyColors.gradiantEndColor,
|
|
|
|
|
unselectedColor: MyColors.grey70Color,
|
|
|
|
|
child: Center(
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: const EdgeInsets.all(21.0),
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
children: [
|
|
|
|
|
CountdownTimer(
|
|
|
|
|
endTime: model.endTime,
|
|
|
|
|
widgetBuilder: (context, v) {
|
|
|
|
|
return AutoSizeText(
|
|
|
|
|
getValue(v?.hours) + " : " + getValue(v?.min) + " : " + getValue(v?.sec),
|
|
|
|
|
maxLines: 1,
|
|
|
|
|
style: TextStyle(color: Colors.white, fontSize: 42, letterSpacing: -1.92, fontWeight: FontWeight.bold, height: 1),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
onEnd: null,
|
|
|
|
|
endWidget: "00:00:00".toTextAuto(color: Colors.white, isBold: true, fontSize: 30, letterSpacing: -1.92),
|
|
|
|
|
textStyle: TextStyle(color: Colors.white, fontSize: 30, letterSpacing: -1.92, fontWeight: FontWeight.bold, height: 1),
|
|
|
|
|
).center.expanded,
|
|
|
|
|
LocaleKeys.shiftTime.tr().tr().toTextAuto(color: MyColors.greyACColor, fontSize: 18, maxLine: 1),
|
|
|
|
|
(model.attendanceTracking!.pShtName ?? "00:00:00").toString().toTextAuto(color: Colors.white, isBold: true, fontSize: 26, maxLine: 1),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
19.height,
|
|
|
|
|
LocaleKeys.shiftTime.tr().tr().toText12(color: MyColors.greyACColor),
|
|
|
|
|
(model.attendanceTracking!.pShtName ?? "00:00:00").toString().toText22(color: Colors.white, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
).paddingAll(21),
|
|
|
|
|
).expanded,
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
).paddingAll(12),
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
).expanded,
|
|
|
|
|
),
|
|
|
|
|
Center(
|
|
|
|
|
child: Container(
|
|
|
|
|
// color: MyColors.backgroundBlackColor,
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)),
|
|
|
|
|
gradient: LinearGradient(transform: GradientRotation(.64), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
|
|
|
|
|
MyColors.gradiantEndColor,
|
|
|
|
|
MyColors.gradiantStartColor,
|
|
|
|
|
]),
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
transform: GradientRotation(.64),
|
|
|
|
|
begin: Alignment.topRight,
|
|
|
|
|
end: Alignment.bottomLeft,
|
|
|
|
|
colors: [
|
|
|
|
|
MyColors.gradiantEndColor,
|
|
|
|
|
MyColors.gradiantStartColor,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
//height: 187,
|
|
|
|
|
padding: const EdgeInsets.only(left: 31, right: 31, top: 31, bottom: 16),
|
|
|
|
|
padding: const EdgeInsets.only(left: 21, right: 21, top: 21, bottom: 16),
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)),
|
|
|
|
|
gradient: LinearGradient(transform: GradientRotation(.64), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
|
|
|
|
@ -179,80 +191,7 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen> {
|
|
|
|
|
),
|
|
|
|
|
), //.expanded,
|
|
|
|
|
|
|
|
|
|
MarkAttendanceWidget(model, topPadding: 24),
|
|
|
|
|
// Container(
|
|
|
|
|
// width: double.infinity,
|
|
|
|
|
// decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
|
|
|
|
|
// // margin: EdgeInsets.only(top: 187 - 31),
|
|
|
|
|
// padding: EdgeInsets.only(left: 21, right: 21, top: 24, bottom: 24),
|
|
|
|
|
// child: Column(
|
|
|
|
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
// mainAxisSize: MainAxisSize.min,
|
|
|
|
|
// children: [
|
|
|
|
|
// LocaleKeys.markAttendance.tr().toSectionHeading(),
|
|
|
|
|
// LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: Color(0xff535353)),
|
|
|
|
|
// 24.height,
|
|
|
|
|
// GridView(
|
|
|
|
|
// physics: const NeverScrollableScrollPhysics(),
|
|
|
|
|
// shrinkWrap: true,
|
|
|
|
|
// padding: EdgeInsets.zero,
|
|
|
|
|
// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
|
|
|
|
|
// children: <Widget>[
|
|
|
|
|
// if (isNfcEnabled)
|
|
|
|
|
// attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () {
|
|
|
|
|
// if (isNfcLocationEnabled) {
|
|
|
|
|
// Location.getCurrentLocation((LatLng? latlng) {
|
|
|
|
|
// performNfcAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "");
|
|
|
|
|
// });
|
|
|
|
|
// } else {
|
|
|
|
|
// performNfcAttendance(model);
|
|
|
|
|
// }
|
|
|
|
|
// }),
|
|
|
|
|
// if (isWifiEnabled)
|
|
|
|
|
// attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () {
|
|
|
|
|
// if (isWifiLocationEnabled) {
|
|
|
|
|
// Location.getCurrentLocation((LatLng? latlng) {
|
|
|
|
|
// performWifiAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "");
|
|
|
|
|
// });
|
|
|
|
|
// } else {
|
|
|
|
|
// performWifiAttendance(model);
|
|
|
|
|
// }
|
|
|
|
|
// // connectWifi();
|
|
|
|
|
// }),
|
|
|
|
|
// if (isQrEnabled)
|
|
|
|
|
// attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async {
|
|
|
|
|
// if (isQrLocationEnabled) {
|
|
|
|
|
// Location.getCurrentLocation((LatLng? latlng) {
|
|
|
|
|
// performQrCodeAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? "");
|
|
|
|
|
// });
|
|
|
|
|
// } else {
|
|
|
|
|
// performQrCodeAttendance(model);
|
|
|
|
|
// }
|
|
|
|
|
// // performQrCodeAttendance(model);
|
|
|
|
|
// }),
|
|
|
|
|
// ],
|
|
|
|
|
// )
|
|
|
|
|
// ],
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
|
|
|
|
// Positioned(
|
|
|
|
|
// top: 187 - 21,
|
|
|
|
|
// child: Container(
|
|
|
|
|
// padding: EdgeInsets.only(left: 31, right: 31, top: 31, bottom: 16),
|
|
|
|
|
// decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
|
|
|
|
|
// child: Column(
|
|
|
|
|
// children: [
|
|
|
|
|
// Row(
|
|
|
|
|
// children: [commonStatusView("Check In", "09:27"), commonStatusView("Check Out", "- - : - -")],
|
|
|
|
|
// ),
|
|
|
|
|
// 21.height,
|
|
|
|
|
// Row(
|
|
|
|
|
// children: [commonStatusView("Late In", "00:27"), commonStatusView("Regular", "08:00")],
|
|
|
|
|
// ),
|
|
|
|
|
// ],
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
|
|
|
|
MarkAttendanceWidget(model, topPadding: 21),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -265,60 +204,6 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
|
|
|
|
|
// if (isNfcLocationEnabled) {
|
|
|
|
|
// print("nfc location enabled");
|
|
|
|
|
// } else {
|
|
|
|
|
// print("nfc not location enabled");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// showNfcReader(context, onNcfScan: (String? nfcId) async {
|
|
|
|
|
// print(nfcId);
|
|
|
|
|
// Utils.showLoading(context);
|
|
|
|
|
// try {
|
|
|
|
|
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
|
|
|
|
|
// bool status = await model.fetchAttendanceTracking(context);
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// } catch (ex) {
|
|
|
|
|
// print(ex);
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// Utils.handleException(ex, context, (msg) {
|
|
|
|
|
// Utils.confirmDialog(context, msg);
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// Future<void> performWifiAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
|
|
|
|
|
// if (isWifiLocationEnabled) {
|
|
|
|
|
// print("wifi location enabled");
|
|
|
|
|
// } else {
|
|
|
|
|
// print("wifi not location enabled");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// bool v = await WiFiForIoTPlugin.connect(AppState().mohemmWifiSSID ?? "", password: AppState().mohemmWifiPassword ?? "", joinOnce: true, security: NetworkSecurity.WPA, withInternet: false);
|
|
|
|
|
// if (v) {
|
|
|
|
|
// await WiFiForIoTPlugin.forceWifiUsage(true);
|
|
|
|
|
// print("connected");
|
|
|
|
|
// Utils.showLoading(context);
|
|
|
|
|
// try {
|
|
|
|
|
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng);
|
|
|
|
|
// bool status = await model.fetchAttendanceTracking(context);
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// await closeWifiRequest();
|
|
|
|
|
// } catch (ex) {
|
|
|
|
|
// print(ex);
|
|
|
|
|
// await closeWifiRequest();
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// Utils.handleException(ex, context, (msg) {
|
|
|
|
|
// Utils.confirmDialog(context, msg);
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// Utils.confirmDialog(context, LocaleKeys.comeNearHMGWifi.tr());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
String getValue(int? v) {
|
|
|
|
|
if (v == null) {
|
|
|
|
|
return "00";
|
|
|
|
@ -335,63 +220,6 @@ class _TodayAttendanceScreenState extends State<TodayAttendanceScreen> {
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Future<void> performQrCodeAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
|
|
|
|
|
// var qrCodeValue = await Navigator.of(context).push(
|
|
|
|
|
// MaterialPageRoute(
|
|
|
|
|
// builder: (context) => QrScannerDialog(),
|
|
|
|
|
// ),
|
|
|
|
|
// );
|
|
|
|
|
// if (qrCodeValue != null) {
|
|
|
|
|
// print("qrCode: " + qrCodeValue);
|
|
|
|
|
// Utils.showLoading(context);
|
|
|
|
|
// try {
|
|
|
|
|
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue);
|
|
|
|
|
// bool status = await model.fetchAttendanceTracking(context);
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// } catch (ex) {
|
|
|
|
|
// print(ex);
|
|
|
|
|
// Utils.hideLoading(context);
|
|
|
|
|
// Utils.handleException(ex, context, (msg) {
|
|
|
|
|
// Utils.confirmDialog(context, msg);
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// Widget attendanceMethod(String title, String image, bool isEnabled, VoidCallback onPress) => Container(
|
|
|
|
|
// decoration: BoxDecoration(
|
|
|
|
|
// borderRadius: BorderRadius.circular(15),
|
|
|
|
|
// gradient: const LinearGradient(transform: GradientRotation(.64), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
|
|
|
|
|
// MyColors.gradiantEndColor,
|
|
|
|
|
// MyColors.gradiantStartColor,
|
|
|
|
|
// ]),
|
|
|
|
|
// ),
|
|
|
|
|
// clipBehavior: Clip.antiAlias,
|
|
|
|
|
// child: Stack(
|
|
|
|
|
// children: [
|
|
|
|
|
// Container(
|
|
|
|
|
// padding: const EdgeInsets.only(left: 10, right: 10, top: 14, bottom: 14),
|
|
|
|
|
// child: Column(
|
|
|
|
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
// children: [
|
|
|
|
|
// SvgPicture.asset(
|
|
|
|
|
// image,
|
|
|
|
|
// color: Colors.white,
|
|
|
|
|
// ).expanded,
|
|
|
|
|
// title.toText17(isBold: true, color: Colors.white),
|
|
|
|
|
// ],
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
|
|
|
|
// if (!isEnabled)
|
|
|
|
|
// Container(
|
|
|
|
|
// width: double.infinity,
|
|
|
|
|
// height: double.infinity,
|
|
|
|
|
// color: Colors.grey.withOpacity(0.7),
|
|
|
|
|
// )
|
|
|
|
|
// ],
|
|
|
|
|
// ),
|
|
|
|
|
// ).onPress(onPress);
|
|
|
|
|
|
|
|
|
|
Widget commonStatusView(String title, String time) => Expanded(
|
|
|
|
|
child: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [
|
|
|
|
|
title.toText12(color: Colors.white.withOpacity(.69)),
|
|
|
|
|