ui ux improvements

ui_ux_rollout_merge
Sikander Saleem 2 weeks ago
parent 072f3da97e
commit deeff9e13e

@ -211,7 +211,7 @@ class _AppBarWidgetState extends State<AppBarWidget> with TickerProviderStateMix
[], [],
builder: (_, MenuController controller, Widget? child) { builder: (_, MenuController controller, Widget? child) {
return Container( return Container(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
color: AppColor.assetGroupBackground(context), color: AppColor.assetGroupBackground(context),
@ -222,10 +222,13 @@ class _AppBarWidgetState extends State<AppBarWidget> with TickerProviderStateMix
), ),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
spacing: 16, spacing: 8,
children: [ children: [
Text(settingProvider.assetGroup?.name ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context))), Text(
Icon(Icons.keyboard_arrow_down, color: AppColor.headingTextColor(context)), settingProvider.assetGroup?.name ?? "",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context)),
),
Icon(Icons.keyboard_arrow_down, color: AppColor.headingTextColor(context), size: 20),
], ],
), ),
).onPress(() { ).onPress(() {
@ -240,7 +243,7 @@ class _AppBarWidgetState extends State<AppBarWidget> with TickerProviderStateMix
}), }),
), ),
), ),
16.width, 8.width,
SlideTransition( SlideTransition(
position: _rightSlideAnimation, position: _rightSlideAnimation,
child: FadeTransition( child: FadeTransition(
@ -248,20 +251,31 @@ class _AppBarWidgetState extends State<AppBarWidget> with TickerProviderStateMix
child: Row( child: Row(
children: [ children: [
if (context.settingProvider.isUserFlowMedical) ...[ if (context.settingProvider.isUserFlowMedical) ...[
("dashboard/chat").toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).paddingOnly(top: 0, end: 0).onPress(() { IconButton(
Navigator.of(context).push(CupertinoPageRoute(builder: (_) => UnReadChatList())); icon: ("dashboard/chat").toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)),
}), padding: EdgeInsets.zero,
16.width, visualDensity: VisualDensity.compact,
tooltip: "Notifications",
onPressed: () {
Navigator.of(context).push(CupertinoPageRoute(builder: (_) => UnReadChatList()));
},
),
], ],
("dashboard/notification").toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).paddingOnly(top: 0, end: 0).onPress(() { IconButton(
Navigator.of(context).pushNamed(NotificationsPage.id); icon: ("dashboard/notification").toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)),
}), padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
tooltip: "Notifications",
onPressed: () {
Navigator.of(context).pushNamed(NotificationsPage.id);
},
),
], ],
), ),
), ),
), ),
], ],
).paddingOnly(start: 16, end: 16); ).paddingOnly(start: 16, end: 08);
}), }),
); );
} }

@ -117,8 +117,6 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
final bool isHouseKeeper = user?.type == UsersTypes.houseKeeper; final bool isHouseKeeper = user?.type == UsersTypes.houseKeeper;
return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
// !isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0 // !isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0
// ? Column( // ? Column(
// crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
@ -193,46 +191,50 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
// ).paddingOnly(start: 14, end: 12) // ).paddingOnly(start: 14, end: 12)
// : // :
isHouseKeeper
isHouseKeeper ? Row(
? Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
children: [ 'All Tasks'.addTranslation.heading4(context),
'All Tasks'.addTranslation.heading4(context), 'add_icon'
'add_icon'.toSvgAsset(width: 24, height: 24,).onPress(() { .toSvgAsset(
Navigator.of(context).pushNamed('/cleaner_search'); width: 24,
}), height: 24,
], )
).paddingOnly(start: 16, end: 16) : .onPress(() {
Row( Navigator.of(context).pushNamed('/cleaner_search');
spacing: 16, }),
children: [ ],
Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))).expanded, ).paddingOnly(start: 16, end: 16)
// todo commenting this code, for FM : Row(
// if (!isFMSEngineer) spacing: 16,
// 'search'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() { children: [
// Navigator.of(context).pushNamed('/cleaner_search'); Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))).expanded,
// }), // todo commenting this code, for FM
// if (!isFMSEngineer)
if (dashboardProvider.listIndex.isNotEmpty) // 'search'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
Text( // Navigator.of(context).pushNamed('/cleaner_search');
'Clear Filters', // }),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
).onPress(() { if (dashboardProvider.listIndex.isNotEmpty)
dashboardProvider.resetRequestDataList(); Text(
dashboardProvider.currentListIndex = null; 'Clear Filters',
Provider.of<AllRequestsProvider>(context, listen: false) style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
..reset() ).onPress(() {
..getAllRequests(context); dashboardProvider.resetRequestDataList();
}), dashboardProvider.currentListIndex = null;
Transform.flip( Provider.of<AllRequestsProvider>(context, listen: false)
flipY: isAscending, ..reset()
child: 'dashboard/sort_descending'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() { ..getAllRequests(context);
_toggleSort(dashboardProvider, user?.type); }),
}), Transform.flip(
) flipY: isAscending,
], child: 'dashboard/sort_descending'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
).paddingOnly(start: 16, end: 16), _toggleSort(dashboardProvider, user?.type);
}),
)
],
).paddingOnly(start: 16, end: 16),
), ),
), ),

@ -69,7 +69,7 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
InfoTextWidget(label: 'Start Date'.addTranslation, value: sessionModel.startDate?.toServiceRequestDetailsFormat ?? '-'), InfoTextWidget(label: 'Start Date'.addTranslation, value: sessionModel.startDate?.toServiceRequestDetailsFormat ?? '-'),
InfoTextWidget(label: 'End Date'.addTranslation, value: sessionModel.endDate?.toServiceRequestDetailsFormat ?? '-'), InfoTextWidget(label: 'End Date'.addTranslation, value: sessionModel.endDate?.toServiceRequestDetailsFormat ?? '-'),
], ],
).toShadowContainer(context, padding: 16, borderRadius: 20); ).toShadowContainer(context, borderRadius: 20);
} }
Widget siteListCard(BuildContext context, SessionModel sessionModel) { Widget siteListCard(BuildContext context, SessionModel sessionModel) {
@ -84,7 +84,7 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
sites: sites, sites: sites,
), ),
], ],
).toShadowContainer(context, padding: 16, borderRadius: 20); ).toShadowContainer(context, borderRadius: 20);
} }
} }

@ -262,10 +262,8 @@ class OneTimeTaskPreviewScreen extends StatelessWidget {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
InfoHeader16Widget( InfoHeader16Widget('Captured Images'),
'Captured Images', 12.height,
),
16.height,
Wrap( Wrap(
spacing: 8, spacing: 8,
runSpacing: 8, runSpacing: 8,

@ -159,7 +159,7 @@ class _OneTimeTaskViewState extends State<OneTimeTaskView> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
_buildTaskInfoCard(context), _buildTaskInfoCard(context),
16.height, 12.height,
CleanerChecklistWidget( CleanerChecklistWidget(
isClosed: isClosed, isClosed: isClosed,
checklistItems: _convertInstructionsToChecklist(), checklistItems: _convertInstructionsToChecklist(),
@ -276,9 +276,9 @@ class _OneTimeTaskViewState extends State<OneTimeTaskView> {
), ),
], ],
], ],
).paddingOnly(start: 16, end: 16, top: 16, bottom: 16), ),
], ],
).toShadowContainer(context, padding: 0); ).toShadowContainer(context);
} }
List<ChecklistItem> _convertInstructionsToChecklist() { List<ChecklistItem> _convertInstructionsToChecklist() {

@ -37,18 +37,17 @@ class _CleanerChecklistWidgetState extends State<CleanerChecklistWidget> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
spacing: 12,
children: [ children: [
InfoHeader16Widget('Checklist'), InfoHeader16Widget('Checklist'),
16.height,
ListView.separated( ListView.separated(
shrinkWrap: true, shrinkWrap: true,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) => _buildChecklistItem(context, widget.checklistItems[index]), itemBuilder: (cxt, index) => _buildChecklistItem(context, widget.checklistItems[index]),
separatorBuilder: (cxt, index) => const Divider(height: 1, color: AppColor.neutral30, thickness: 1).paddingOnly(top: 16, bottom: 16), separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
itemCount: widget.checklistItems.length) itemCount: widget.checklistItems.length)
.toShadowContainer(context, padding: 16), .toShadowContainer(context),
16.height,
_buildImageCaptureWidget(context), _buildImageCaptureWidget(context),
], ],
); );
@ -70,7 +69,7 @@ class _CleanerChecklistWidgetState extends State<CleanerChecklistWidget> {
child: Checkbox( child: Checkbox(
value: item.isChecked, value: item.isChecked,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
side: BorderSide(color: Colors.black.withValues(alpha: .05)), side: BorderSide(color: AppColor.loadingColor(context), width: 1.0),
visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0), visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
activeColor: AppColor.primary10, activeColor: AppColor.primary10,
onChanged: (bool? value) {}, onChanged: (bool? value) {},
@ -181,12 +180,7 @@ class _CleanerChecklistWidgetState extends State<CleanerChecklistWidget> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( InfoHeader16Widget('Captured Image'),
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InfoHeader16Widget('Captured Image'),
],
),
8.height, 8.height,
_buildImageWidget(context), _buildImageWidget(context),
], ],

@ -175,7 +175,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()),
], ],
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, showShadow: false).onPress(() {
if (showActionButtons) return; if (showActionButtons) return;
if (requestDetailProvider.isReadOnlyRequest) { if (requestDetailProvider.isReadOnlyRequest) {
editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity); editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
@ -272,7 +272,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
// // ), // // ),
// ] // ]
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, showShadow: false).onPress(() {
if (showActionButtons) return; if (showActionButtons) return;
if (requestDetailProvider.isReadOnlyRequest) { if (requestDetailProvider.isReadOnlyRequest) {
editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity); editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);

@ -129,7 +129,7 @@ class HistoryLogView extends StatelessWidget {
), ),
), ),
], ],
).toShadowContainer(context, padding: 16).paddingOnly(bottom: 16); ).toShadowContainer(context).paddingOnly(bottom: 16);
} }
Widget statusCard(BuildContext context, String status) { Widget statusCard(BuildContext context, String status) {

@ -55,7 +55,7 @@ class _InitialVisitCardState extends State<InitialVisitCard> {
requestDetailProvider.needVisitHelperModel!.comment!.bodyText2(context).custom(color: AppColor.neutral120), requestDetailProvider.needVisitHelperModel!.comment!.bodyText2(context).custom(color: AppColor.neutral120),
] ]
], ],
).toShadowContainer(context, padding: 16); ).toShadowContainer(context);
}); });
} }
} }

@ -205,11 +205,11 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
], ],
), ),
if (context.userProvider.isEngineer && !(workOrder.asset!.hasTrainingImageData ?? true)) ...[ if (context.userProvider.isEngineer && !(workOrder.asset!.hasTrainingImageData ?? true)) ...[
InfoTextLabelWidget(label: '*Images are required for the asset', color: AppColor.red30), InfoTextLabelWidget(label: '*Images are required for the asset', color: AppColor.red30, textStyle: AppTextStyles.tinyFont2),
4.height, 4.height,
], ],
InfoTextWidget(label: context.translation.assetName, value: workOrder.assetNdModel!.name?.cleanupWhitespace.capitalizeFirstOfEach), InfoTextWidget(label: context.translation.assetName, value: workOrder.assetNdModel!.name?.cleanupWhitespace.capitalizeFirstOfEach),
InfoTextWidget(label: context.translation.assetNumber, value: workOrder.asset!.assetNumber), InfoTextWidget(label: context.translation.assetNumber, value: workOrder.asset!.assetNumber, copyValue: true),
InfoTextWidget(label: context.translation.serialNo, value: workOrder.asset!.assetSerialNo), InfoTextWidget(label: context.translation.serialNo, value: workOrder.asset!.assetSerialNo),
InfoTextWidget(label: context.translation.manufacture, value: workOrder.manufacturer?.name?.cleanupWhitespace.capitalizeFirstOfEach), InfoTextWidget(label: context.translation.manufacture, value: workOrder.manufacturer?.name?.cleanupWhitespace.capitalizeFirstOfEach),
InfoTextWidget(label: context.translation.model, value: workOrder.model?.name!.cleanupWhitespace.capitalizeFirstOfEach), InfoTextWidget(label: context.translation.model, value: workOrder.model?.name!.cleanupWhitespace.capitalizeFirstOfEach),
@ -227,7 +227,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
//... request details starts here.... //... request details starts here....
InfoHeader16Widget(context.translation.callDetails), InfoHeader16Widget(context.translation.callDetails),
InfoTextWidget(label: context.translation.cmNumber, value: workOrder.workOrderNo), InfoTextWidget(label: context.translation.cmNumber, value: workOrder.workOrderNo, copyValue: true),
InfoTextWidget(label: context.translation.createdBy, value: workOrder.workOrderCreatedBy?.userName ?? "-"), InfoTextWidget(label: context.translation.createdBy, value: workOrder.workOrderCreatedBy?.userName ?? "-"),
InfoTextWidget(label: context.translation.arrivedDate, value: workOrder.iHaveArrivedDate != null ? workOrder.iHaveArrivedDate.toString().toServiceRequestDetailsFormat : '-'), InfoTextWidget(label: context.translation.arrivedDate, value: workOrder.iHaveArrivedDate != null ? workOrder.iHaveArrivedDate.toString().toServiceRequestDetailsFormat : '-'),
InfoTextWidget(label: context.translation.closedDate, value: workOrder.closedDate != null ? workOrder.closedDate!.toString().toServiceRequestDetailsFormat : '-'), InfoTextWidget(label: context.translation.closedDate, value: workOrder.closedDate != null ? workOrder.closedDate!.toString().toServiceRequestDetailsFormat : '-'),
@ -297,9 +297,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
assetRetiredButton(context: context), assetRetiredButton(context: context),
] ]
], ],
).toShadowContainer( ).toShadowContainer(context);
context,
);
} }
Widget contactInfoCard(BuildContext context, WorkOrderData workOrder) { Widget contactInfoCard(BuildContext context, WorkOrderData workOrder) {
@ -355,7 +353,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
InfoTextWidget(label: 'MR No'.addTranslation, value: provider.currentWorkOrder?.data?.mrNo?.toString() ?? '-'), InfoTextWidget(label: 'MR No'.addTranslation, value: provider.currentWorkOrder?.data?.mrNo?.toString() ?? '-'),
InfoTextWidget(label: 'Exchange Cost'.addTranslation, value: provider.currentWorkOrder?.data?.exchangeCost?.toString() ?? '-'), InfoTextWidget(label: 'Exchange Cost'.addTranslation, value: provider.currentWorkOrder?.data?.exchangeCost?.toString() ?? '-'),
], ],
).toShadowContainer(context, padding: 16); ).toShadowContainer(context);
} }
Widget assetRetiredButton({required BuildContext context}) { Widget assetRetiredButton({required BuildContext context}) {

@ -133,7 +133,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
onPick: (asset) async { onPick: (asset) async {
device = asset; device = asset;
payload["assetId"] = asset?.id; payload["assetId"] = asset?.id;
payload["oracleCode"] = asset.modelDefinition?.oracleCodes?.first.codeValue; payload["oracleCode"] = (asset.modelDefinition?.oracleCodes?.isNotEmpty ?? false) ? asset.modelDefinition?.oracleCodes?.first.codeValue : null;
payload["model"] = asset.modelDefinition?.modelName; payload["model"] = asset.modelDefinition?.modelName;
payload["manufacturer"] = asset.modelDefinition?.manufacturerName; payload["manufacturer"] = asset.modelDefinition?.manufacturerName;
payload["assetOrigin"] = asset.modelDefinition?.assetName; payload["assetOrigin"] = asset.modelDefinition?.assetName;

@ -41,41 +41,39 @@ class IncidentDetailPage extends StatelessWidget {
List<IncidentAttachments> allAttachments = snapshot.data!.incidentAttachments!; List<IncidentAttachments> allAttachments = snapshot.data!.incidentAttachments!;
return ListView( return SingleChildScrollView(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
children: [ child: Column(
Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Row(
Row( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ StatusLabel(
StatusLabel( label: snapshot.data!.incidentStatusName!,
label: snapshot.data!.incidentStatusName!, textColor: AppColor.getRequestStatusTextColorByName(context, snapshot.data!.incidentStatusName!),
textColor: AppColor.getRequestStatusTextColorByName(context, snapshot.data!.incidentStatusName!), backgroundColor: AppColor.getRequestStatusColorByName(context, snapshot.data!.incidentStatusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, snapshot.data!.incidentStatusName!), ),
), 1.width.expanded,
1.width.expanded, InfoDateWidget(snapshot.data!.createdDate?.toString() ?? ""),
InfoDateWidget(snapshot.data!.createdDate?.toString() ?? ""),
],
),
// 12.height,
...requesterDetails(context, snapshot.data!),
const Divider().defaultStyle(context),
...requestDetails(context, snapshot.data!),
if (snapshot.data!.ovrTicketNumber?.isNotEmpty ?? false) ovrInformation(context, snapshot.data!.ovrTicketNumber!),
const Divider().defaultStyle(context),
...assetDetails(context, snapshot.data!),
const Divider().defaultStyle(context),
...personInvolvedDetails(context, snapshot.data!),
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
InfoHeader16Widget("Attachments".addTranslation),
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []),
], ],
),
// 12.height,
...requesterDetails(context, snapshot.data!),
const Divider().defaultStyle(context),
...requestDetails(context, snapshot.data!),
if (snapshot.data!.ovrTicketNumber?.isNotEmpty ?? false) ovrInformation(context, snapshot.data!.ovrTicketNumber!),
const Divider().defaultStyle(context),
...assetDetails(context, snapshot.data!),
const Divider().defaultStyle(context),
...personInvolvedDetails(context, snapshot.data!),
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
InfoHeader16Widget("Attachments".addTranslation),
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []),
], ],
).toShadowContainer(context, padding: 16), ],
], ).toShadowContainer(context),
); );
})); }));
} }
@ -98,7 +96,7 @@ class IncidentDetailPage extends StatelessWidget {
text: TextSpan(text: "Work Order: ", style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context)), children: [ text: TextSpan(text: "Work Order: ", style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context)), children: [
TextSpan( TextSpan(
text: "${incidentData.workOrderNo}", text: "${incidentData.workOrderNo}",
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline), style: AppTextStyles.bodyText.copyWith(color: AppColor.primary10, decoration: TextDecoration.underline),
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () async { ..onTap = () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => CMDetailPage(requestId: incidentData.workOrderId!, moduleId: 3))); await Navigator.of(context).push(MaterialPageRoute(builder: (_) => CMDetailPage(requestId: incidentData.workOrderId!, moduleId: 3)));

@ -98,7 +98,7 @@ class _LoanEquipmentDetailPageState extends State<LoanEquipmentDetailPage> {
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []), FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []),
], ],
], ],
).toShadowContainer(context, padding: 12) ).toShadowContainer(context)
], ],
).expanded, ).expanded,
// @todo ask backend to add loanTypeValue, so we can show or hide the buttons // @todo ask backend to add loanTypeValue, so we can show or hide the buttons

@ -106,7 +106,7 @@ class _MedicalGasInspectionDetailPageState extends State<MedicalGasInspectionDet
FilesList(images: model!.deliveryNoteAttachmentDto.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []), FilesList(images: model!.deliveryNoteAttachmentDto.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []),
], ],
], ],
).toShadowContainer(context, padding: 16), ).toShadowContainer(context,),
], ],
).expanded, ).expanded,
if (model?.requestStatus?.value != null && model!.requestStatus!.value! < 3) if (model?.requestStatus?.value != null && model!.requestStatus!.value! < 3)

@ -1,866 +0,0 @@
// import 'dart:async';
// import 'dart:developer';
// import 'dart:io';
//
// import 'package:flutter/material.dart';
// import 'package:flutter_svg/flutter_svg.dart';
// import 'package:geolocator/geolocator.dart';
// import 'package:huawei_location/huawei_location.dart';
// import 'package:nfc_manager/nfc_manager.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
// // import 'package:platform_device_id/platform_device_id.dart';
// import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.dart';
// import 'package:test_sa/extensions/enum_extensions.dart';
// import 'package:test_sa/extensions/text_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/helper/utils.dart';
// import 'package:test_sa/models/enums/swipe_type.dart';
// import 'package:test_sa/models/lookup.dart';
// import 'package:test_sa/models/new_models/swipe_model.dart';
// import 'package:test_sa/nfc/nfc_reader_sheet.dart';
// import 'package:test_sa/utilities/Location.dart' as location;
// import 'package:test_sa/views/widgets/dialogs/confirm_dialog.dart';
// import 'package:test_sa/views/widgets/dialogs/success_dialog.dart';
// import 'package:test_sa/views/widgets/qr_scanner_dialog.dart';
// import 'package:wifi_iot/wifi_iot.dart';
//
// import '../../app_style/app_color.dart';
//
// class MarkAttendanceWidget extends StatefulWidget {
// // DashboardProviderModel model;
// double topPadding;
// bool isFromDashboard;
//
// MarkAttendanceWidget( {Key? key, this.topPadding = 0, this.isFromDashboard = false}) : super(key: key);
// // todo MarkAttendanceWidget(this.model, {Key? key, this.topPadding = 0, this.isFromDashboard = false}) : super(key: key);
//
// @override
// _MarkAttendanceWidgetState createState() {
// return _MarkAttendanceWidgetState();
// }
// }
//
// class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
// bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false;
//
// int _locationUpdateCbId = 0;
//
// @override
// void initState() {
// super.initState();
// checkAttendanceAvailability();
// }
//
// void checkAttendanceAvailability() async {
// bool isAvailable = await NfcManager.instance.isAvailable();
// // setState(() {
// // AppState().privilegeListModel!.forEach((PrivilegeListModel element) {
// // if (element.serviceName == "enableNFC") {
// // if (isAvailable) if (element.previlege ?? false) isNfcEnabled = true;
// // } else if (element.serviceName == "enableQR") {
// // if (element.previlege ?? false) isQrEnabled = true;
// // } else if (element.serviceName == "enableWIFI") {
// // if (element.previlege ?? false) isWifiEnabled = true;
// // } else if (element.serviceName!.trim() == "enableLocationNFC") {
// // if (element.previlege ?? false) isNfcLocationEnabled = true;
// // } else if (element.serviceName == "enableLocationQR") {
// // if (element.previlege ?? false) isQrLocationEnabled = true;
// // } else if (element.serviceName == "enableLocationWIFI") {
// // if (element.previlege ?? false) isWifiLocationEnabled = true;
// // }
// // });
// // });
// }
//
// void checkHuaweiLocationPermission(String attendanceType) async {
// // Permission_Handler permissionHandler = PermissionHandler();
// location.Location.isEnabled((bool isEnabled) async {
// if (isEnabled) {
// location.Location.havePermission((bool permission) async {
// if (permission) {
// getHuaweiCurrentLocation(attendanceType);
// } else {
// bool has = await requestPermissions();
// if (has) {
// getHuaweiCurrentLocation(attendanceType);
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// }
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
//
// // if (await permissionHandler.hasLocationPermission()) {
// // getHuaweiCurrentLocation(attendanceType);
// // } else {
// // bool has = await requestPermissions();
// // if (has) {
// // getHuaweiCurrentLocation(attendanceType);
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to give location permission to mark attendance",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // }
// // }
// }
//
// Future<bool> requestPermissions() async {
// var result = await [
// Permission.location,
// ].request();
// return (result[Permission.location] == PermissionStatus.granted || result[Permission.locationAlways] == PermissionStatus.granted);
// }
//
// @override
// void dispose() {
// super.dispose();
// // Stop Session
// NfcManager.instance.stopSession();
// }
//
// @override
// Widget build(BuildContext context) {
// return Container(
// padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding),
// decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
// width: double.infinity,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// // LocaleKeys.markAttendance.tr().toSectionHeading(),
// // LocaleKeys.selectMethodOfAttendance.tr().toText11(color: const Color(0xff535353)),
// GridView(
// physics: const NeverScrollableScrollPhysics(),
// shrinkWrap: true,
// padding: const EdgeInsets.only(bottom: 0, top: 21),
// gridDelegate:
// SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
// children: <Widget>[
// attendanceMethod(SwipeTypeEnum.NFC.name, Icons.nfc, true, () {
// log('i am here...nfc');
// handleSwipe(swipeType: SwipeTypeEnum.NFC, isEnable: true);
// return;
// // if (AppState().getIsHuawei) {
// if (false) {
// checkHuaweiLocationPermission("NFC");
// } else {
// location.Location.isEnabled((bool isEnabled) {
// if (isEnabled) {
// location.Location.havePermission((bool permission) {
// if (permission) {
// Utils.showLoading(context);
// location.Location.getCurrentLocation(
// (Position position, bool isMocked) {
// if (isMocked) {
// Utils.hideLoading(context);
// markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
// } else {
// Utils.hideLoading(context);
// //todo performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// }
// },
// () {
// Utils.hideLoading(context);
// Utils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// },
// context,
// );
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openAppSettings();
// },
// ),
// );
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
// }
// }),
// //if (isWifiEnabled) //todo
// attendanceMethod("Wifi", Icons.wifi, isWifiEnabled, () {
// // if (AppState().getIsHuawei) {
// if (false) {
// checkHuaweiLocationPermission("WIFI");
// } else {
// location.Location.isEnabled((bool isEnabled) {
// if (isEnabled) {
// location.Location.havePermission((bool permission) {
// if (permission) {
// Utils.showLoading(context);
// location.Location.getCurrentLocation(
// (Position position, bool isMocked) {
// if (isMocked) {
// Utils.hideLoading(context);
// markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
// } else {
// Utils.hideLoading(context);
// //todo performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// }
// },
// () {
// Utils.hideLoading(context);
// Utils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// },
// context,
// );
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openAppSettings();
// },
// ),
// );
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
// }
// }),
// // if (isQrEnabled) //todo
// attendanceMethod(SwipeTypeEnum.QR.name, Icons.qr_code_2, true, () async {
// handleSwipe(swipeType: SwipeTypeEnum.QR, isEnable: true);
// return;
// // if (AppState().getIsHuawei) {
// if (false) {
// checkHuaweiLocationPermission("QR");
// } else {
// location.Location.isEnabled((bool isEnabled) {
// if (isEnabled) {
// location.Location.havePermission((bool permission) {
// if (permission) {
// Utils.showLoading(context);
// location.Location.getCurrentLocation(
// (Position position, bool isMocked) {
// if (isMocked) {
// Utils.hideLoading(context);
// markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
// } else {
// Utils.hideLoading(context);
// //todo performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// }
// },
// () {
// Utils.hideLoading(context);
// Utils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// },
// context,
// );
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openAppSettings();
// },
// ),
// );
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
// }
// }),
// ],
// )
// ],
// ),
// );
// }
//
// void handleSwipe({required SwipeTypeEnum swipeType,required bool isEnable,}){
// log('handle swipe value is ${swipeType.name}');
// // if (AppState().getIsHuawei) {
// if (false) {
// checkHuaweiLocationPermission("NFC");
// } else {
// location.Location.isEnabled((bool isEnabled) {
// if (isEnabled) {
// location.Location.havePermission((bool permission) {
// if (permission) {
// Utils.showLoading(context);
// location.Location.getCurrentLocation(
// (Position position, bool isMocked) {
// if (isMocked) {
// Utils.hideLoading(context);
// markFakeAttendance(swipeType.name, position.latitude.toString() ?? "", position.longitude.toString() ?? "");
// } else {
// Utils.hideLoading(context);
// //todo performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// handleSwipeOperation(swipeType: swipeType,lat: position.latitude,lang: position.longitude);
// }
// },
// () {
// Utils.hideLoading(context);
// Utils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// },
// context,
// );
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openAppSettings();
// },
// ),
// );
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
// }
// }
//
// void handleSwipeOperation({required SwipeTypeEnum swipeType,double ?lat, double ?lang}){
// switch(swipeType){
// case SwipeTypeEnum.NFC:
// handleNfcAttendance(latitude: lat,longitude: lang);
// return;
// case SwipeTypeEnum.QR:
// performQrCodeAttendance(latitude: lat,longitude: lang);
// return;
// case SwipeTypeEnum.Wifi:
// return;
//
// }
// }
//
// void getHuaweiCurrentLocation(String attendanceType) async {
// try {
// Utils.showLoading(context);
// FusedLocationProviderClient locationService = FusedLocationProviderClient()..initFusedLocationService();
// LocationRequest locationRequest = LocationRequest();
// locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
// locationRequest.interval = 500;
// List<LocationRequest> locationRequestList = <LocationRequest>[locationRequest];
// LocationSettingsRequest locationSettingsRequest = LocationSettingsRequest(requests: locationRequestList);
//
// late StreamSubscription<Location> _streamSubscription;
// int requestCode = (await (locationService.requestLocationUpdates(locationRequest)))!;
//
// _streamSubscription = locationService.onLocationData!.listen(
// (Location location) async {
// Utils.hideLoading(context);
// await locationService.removeLocationUpdates(requestCode);
// if (attendanceType == "QR") {
// // todo performQrCodeAttendance(widget.model, lat: location.latitude.toString() ?? "", lng: location.longitude.toString() ?? "");
// }
// if (attendanceType == "WIFI") {
// // todo performWifiAttendance(widget.model, lat: location.latitude.toString() ?? "", lng: location.longitude.toString() ?? "");
// }
// if (attendanceType == "NFC") {
// //todo performNfcAttendance(widget.model, lat: location.latitude.toString() ?? "", lng: location.longitude.toString() ?? "");
// }
// requestCode = 0;
// },
// );
//
// // locationService.checkLocationSettings(locationSettingsRequest).then((settings) async {
// // await locationService.getLastLocation().then((value) {
// // if (value.latitude == null || value.longitude == null) {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "Unable to get your location, Please check your location settings & try again.",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // } else {
// // if (attendanceType == "QR") {
// // performQrCodeAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // if (attendanceType == "WIFI") {
// // performWifiAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // if (attendanceType == "NFC") {
// // performNfcAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // }
// // }).catchError((error) {
// // log("HUAWEI LOCATION getLastLocation ERROR!!!!!");
// // log(error);
// // });
// // }).catchError((error) {
// // log("HUAWEI LOCATION checkLocationSettings ERROR!!!!!");
// // log(error);
// // if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") {
// // // Location service not enabled.
// // }
// // });
// } catch (error) {
// log("HUAWEI LOCATION ERROR!!!!!");
// log('$error');
// Utils.hideLoading(context);
// // Utils.handleException(error, context, null);
// }
// }
//
// Future<void> handleNfcAttendance({double? latitude = 0, double? longitude = 0}) async {
// final dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
//
// if (Platform.isIOS) {
// Utils.readNFc(onRead: (String nfcId) async {
// await _processNfcAttendance(dashBoardProvider, nfcId, latitude, longitude);
// });
// } else {
// showNfcReader(context, onNcfScan: (String? nfcId) async {
// await _processNfcAttendance(dashBoardProvider, nfcId ?? '', latitude, longitude);
// });
// }
// }
//
//
// Future<void> _processNfcAttendance(
// DashBoardProvider dashBoardProvider,
// String nfcId,
// double? latitude,
// double? longitude,
// ) async {
// Utils.showLoading(context);
// try {
// final swipeModel = Swipe(
// swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(),
// value: nfcId,
// latitude: latitude,
// longitude: longitude,
// );
//
// final swipeResponse = await dashBoardProvider.makeSwipe(model: swipeModel);
// log('swipe response i got is ${swipeResponse.toJson()}');
//
// if (swipeResponse.responseCode != 1) {
// Utils.hideLoading(context);
// _showErrorDialog(swipeResponse.message ?? "Unexpected error occurred");
// } else {
// final isSuccess = swipeResponse.data;
// log('nfc swipe response is ${isSuccess}');
// if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// Utils.hideLoading(context);
// _showSuccessDialog();
// }
// } catch (error) {
// Utils.hideLoading(context);
// // Uncomment below line for error handling if needed
// // Utils.handleException(error, context, null);
// }
// }
//
//
// void _showErrorDialog(String message) {
// showDialog(
// context: context,
// builder: (context) => ConfirmDialog(
// message: message,
// onTap: () => Navigator.pop(context),
// ),
// );
// }
//
// void _showSuccessDialog() {
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
//
//
// //older code....
// Future<void> performNfcAttendance({double? lat = 0, double ?lng = 0}) async {
// DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context,listen:false);
// if (Platform.isIOS) {
// Utils.readNFc(onRead: (String nfcId) async {
// Utils.showLoading(context);
// try {
// SwipeModel? swipeResponse = await dashBoardProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: '', latitude: lat, longitude: lng));
// if (swipeResponse.responseCode != 1) {
// Utils.hideLoading(context);
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: swipeResponse.message ?? "Unexpected error occurred",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// } else {
// bool status = swipeResponse.data;
// if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// Utils.hideLoading(context);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// Utils.hideLoading(context);
// // Utils.handleException(ex, context, null);
// }
// });
// } else {
// showNfcReader(context, onNcfScan: (String? nfcId) async {
// Utils.showLoading(context);
// try {
// SwipeModel? swipeResponse = await dashBoardProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: nfcId??'', latitude: lat, longitude: lng));
// log('api response i got is ${swipeResponse.toJson()}');
// if (swipeResponse.responseCode != 1) {
// Utils.hideLoading(context);
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: swipeResponse.message ?? "Unexpected error occurred",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// } else {
// bool status = swipeResponse.data; //use this status to get transactions.
// if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// Utils.hideLoading(context);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// Utils.hideLoading(context);
// // Utils.handleException(ex, context, null);
// }
// // Utils.showLoading(context);
// // try {
// // GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
// // if (g?.messageStatus != 1) {
// // Utils.hideLoading(context);
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: g?.errorEndUserMessage ?? "Unexpected error occurred",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // } else {
// // bool status = await model.fetchAttendanceTracking(context);
// // Utils.hideLoading(context);
// // showMDialog(
// // context,
// // backgroundColor: Colors.transparent,
// // isDismissable: false,
// // child: SuccessDialog(widget.isFromDashboard),
// // );
// // }
// // } catch (ex) {
// // log(ex);
// // Utils.hideLoading(context);
// // // Utils.handleException(ex, context, (String msg) {
// // // Utils.confirmDialog(context, msg);
// // // });
// // }
// });
// }
// }
//
//
//
// void showMDialog(context, {Widget? child, Color? backgroundColor, bool isDismissable = true, bool isBusniessCard = false}) async {
// return showDialog(
// context: context,
// barrierDismissible: isDismissable,
// builder: (context) {
// return Dialog(
// shape: isBusniessCard
// ? const RoundedRectangleBorder(
// borderRadius: BorderRadius.all(
// Radius.circular(15.0),
// ),
// )
// : null,
// backgroundColor: backgroundColor,
// child: child,
// );
// },
// );
// }
// //
// // Future<bool> checkSession() async {
// // try {
// // Utils.showLoading(context);
// // await DashboardApiClient().getOpenMissingSwipes();
// // Utils.hideLoading(context);
// // return true;
// // } catch (ex) {
// // Utils.hideLoading(context);
// // Utils.handleException(ex, context, null);
// // return false;
// // }
// // }
//
//
// //TODO need to confirm ....
// // Future<void> performWifiAttendance({double? latitude, double? lng}) async {
// // // if (Platform.isAndroid) {
// // // if (!(await checkSession())) {
// // // return;
// // // }
// // // }
// // Utils.showLoading(context);
// // bool isConnected = await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "",
// // password: AppState().getMohemmWifiPassword ?? "", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false);
// //
// // if (Platform.isIOS) {
// // if (await WiFiForIoTPlugin.getSSID() == AppState().getMohemmWifiSSID) {
// // isConnected = true;
// // } else {
// // isConnected = false;
// // }
// // }
// //
// // if (isConnected && AppState().isAuthenticated) {
// // await WiFiForIoTPlugin.forceWifiUsage(true);
// // await Future.delayed(const Duration(seconds: 6));
// // 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();
// // if (g?.messageStatus == 2) {
// // showDialog(
// // barrierDismissible: true,
// // context: context,
// // builder: (cxt) => ConfirmDialog(
// // message: g?.errorEndUserMessage ?? "",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // onCloseTap: () {},
// // ),
// // );
// // } else {
// // showMDialog(
// // context,
// // backgroundColor: Colors.transparent,
// // isDismissable: false,
// // child: SuccessDialog(widget.isFromDashboard),
// // );
// // }
// // } catch (ex) {
// // await closeWifiRequest();
// // Utils.hideLoading(context);
// // Utils.handleException(ex, context, null);
// // }
// // } else {
// // if (AppState().isAuthenticated) {
// // Utils.hideLoading(context);
// // Utils.confirmDialog(context, "LocaleKeys.comeNearHMGWifi.tr()");
// // } else {
// // await closeWifiRequest();
// // }
// // }
// // }
//
// Future<bool> closeWifiRequest() async {
// if (Platform.isAndroid) {
// await WiFiForIoTPlugin.forceWifiUsage(false);
// }
// return await WiFiForIoTPlugin.disconnect();
// }
//
// Future<void> performQrCodeAttendance( {double ? latitude , double ?longitude}) async {
// DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context,listen: false);
// var qrCodeValue = await Navigator.of(context).push(
// MaterialPageRoute(
// builder: (BuildContext context) => QrScannerDialog(),
// ),
// );
// if (qrCodeValue != null) {
// Utils.showLoading(context);
// try {
// final swipeModel = Swipe(
// swipeTypeValue: SwipeTypeEnum.QR.getIntFromSwipeTypeEnum(),
// value: qrCodeValue,
// latitude: latitude,
// longitude: longitude,
// );
// log('model i got to scan qr is ${swipeModel.toJson()}');
// final swipeResponse = await dashBoardProvider.makeSwipe(model: swipeModel);
// log('response of swipe is ${swipeResponse.toJson()}');
//
// bool status = await swipeResponse.data;
// Utils.hideLoading(context);
// if (swipeResponse.responseCode == 2) {
// showDialog(
// barrierDismissible: true,
// context: context,
// builder: (cxt) => ConfirmDialog(
// message: swipeResponse.message ?? "",
// onTap: () {
// Navigator.pop(context);
// },
// onCloseTap: () {},
// ),
// );
// } else {
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// log('$ex');
// Utils.hideLoading(context);
// //this need to confirm where it comes..
// // Utils.handleException(ex, context, null);
// }
// }
// }
//
// void markFakeAttendance(dynamic sourceName, String lat, String long) async {
// Utils.showLoading(context);
// try {
// // await DashboardApiClient().markFakeLocation(sourceName: sourceName, lat: lat, long: long);
// Utils.hideLoading(context);
// Utils.confirmDialog(context, "LocaleKeys.fakeLocation.tr()");
// } catch (ex) {
// log('$ex');
// Utils.hideLoading(context);
// //Utils.handleException(ex, context, null);
// }
// }
//
// Widget attendanceMethod(String title, IconData iconData, bool isEnabled, VoidCallback onPress) => Container(
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(15),
// color: isEnabled ? null : Colors.grey.withOpacity(.5),
// gradient: isEnabled
// ? const LinearGradient(
// transform: GradientRotation(.64),
// begin: Alignment.topRight,
// end: Alignment.bottomLeft,
// colors: [
// //ToDo set Colors according to design provided by designer...
// Colors.blue,
// Colors.green,
// // AppColor.gradiantEndColor,
// // MyColors.gradiantStartColor,
// ],
// )
// : null,
// ),
// clipBehavior: Clip.antiAlias,
// padding: const EdgeInsets.only(left: 10, right: 10, top: 14, bottom: 14),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// // SvgPicture.asset(image, color: Colors.white, alignment: Alignment.topLeft).expanded,
// Icon(iconData, color: isEnabled ? AppColor.black35 : Colors.grey),
// title.heading6(context),
// // title.toText17(isBold: true, color: Colors.white),
// ],
// ),
// ).onPress(
// () {
// log('isEnabled is ${!isEnabled}');
// if (!isEnabled) return;
// onPress();
// },
// );
// }

@ -200,10 +200,11 @@ class _MyRequestsPageState extends State<MyRequestsPage> with SingleTickerProvid
setState(() {}); setState(() {});
} }
}).expanded, }).expanded,
16.width, 12.width,
IconButton( IconButton(
icon: "download".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)), icon: "download".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)),
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
tooltip: "Export", tooltip: "Export",
onPressed: () async { onPressed: () async {
final provider = Provider.of<AllRequestsProvider>(context, listen: false); final provider = Provider.of<AllRequestsProvider>(context, listen: false);
@ -223,6 +224,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> with SingleTickerProvid
IconButton( IconButton(
icon: "filter".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)), icon: "filter".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)),
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
tooltip: "Filter", tooltip: "Filter",
onPressed: () async { onPressed: () async {
final result = await Navigator.push(context, CupertinoPageRoute(builder: (context) => AllRequestsFilterPage(data: _search))); final result = await Navigator.push(context, CupertinoPageRoute(builder: (context) => AllRequestsFilterPage(data: _search)));
@ -233,7 +235,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> with SingleTickerProvid
}, },
), ),
], ],
).paddingOnly(start: 16, end: 16), ).paddingOnly(start: 16, end: 8),
), ),
body: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) { body: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return Column( return Column(

@ -4,6 +4,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
class NonHmgEmployeeSwipeView extends StatefulWidget { class NonHmgEmployeeSwipeView extends StatefulWidget {
NonHmgEmployeeSwipeView({Key? key}) : super(key: key); NonHmgEmployeeSwipeView({Key? key}) : super(key: key);
@ -47,6 +48,7 @@ class _NonHmgEmployeeSwipeViewState extends State<NonHmgEmployeeSwipeView> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
InfoHeader16Widget( "Mark Attendance"),
Text( Text(
"Mark Attendance", "Mark Attendance",
style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),

@ -180,7 +180,7 @@ class _LoginPageState extends State<LoginPage> {
children: [ children: [
Checkbox( Checkbox(
value: rememberMe, value: rememberMe,
activeColor: AppColor.blueStatus(context), activeColor: AppColor.primary10,
side: BorderSide(color: AppColor.loadingColor(context), width: 1.0), side: BorderSide(color: AppColor.loadingColor(context), width: 1.0),
visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0), visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
@ -190,7 +190,7 @@ class _LoginPageState extends State<LoginPage> {
}); });
}), }),
8.width, 8.width,
"Remember Me".bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral50).expanded, "Remember Me".bodyText(context).custom(color: AppColor.textStyleColor(context)).expanded,
], ],
), ),
8.height, 8.height,
@ -200,7 +200,7 @@ class _LoginPageState extends State<LoginPage> {
Checkbox( Checkbox(
value: privacyPolicyChecked, value: privacyPolicyChecked,
side: BorderSide(color: AppColor.loadingColor(context), width: 1.0), side: BorderSide(color: AppColor.loadingColor(context), width: 1.0),
activeColor: AppColor.blueStatus(context), activeColor: AppColor.primary10,
visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0), visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onChanged: (value) { onChanged: (value) {
@ -210,10 +210,10 @@ class _LoginPageState extends State<LoginPage> {
}), }),
8.width, 8.width,
RichText( RichText(
text: TextSpan(text: "I have read and agree to ", style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary50 : AppColor.neutral50), children: [ text: TextSpan(text: "I have read and agree to ", style: AppTextStyles.bodyText.copyWith(color: AppColor.textStyleColor(context)), children: [
TextSpan( TextSpan(
text: "Privacy Policy", text: "Privacy Policy",
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline), style: AppTextStyles.bodyText.copyWith(color: AppColor.primary10, decoration: TextDecoration.underline),
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () async { ..onTap = () async {
Uri uri = Uri.parse("https://cloudsolutions.com.sa/en/privacy-policy"); Uri uri = Uri.parse("https://cloudsolutions.com.sa/en/privacy-policy");

@ -1,821 +0,0 @@
// import 'dart:async';
// import 'dart:developer';
// import 'dart:io';
//
// import 'package:flutter/material.dart';
// import 'package:geolocator/geolocator.dart';
// import 'package:huawei_location/huawei_location.dart';
// import 'package:nfc_manager/nfc_manager.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/text_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/new_views/app_style/app_color.dart';
// import 'package:test_sa/new_views/pages/land_page/nfc/nfc_reader_sheet.dart';
// import 'package:test_sa/new_views/swipe_module/dialoge/confirm_dialog.dart';
// import 'package:test_sa/new_views/swipe_module/dialoge/qr_scanner_dialog.dart';
// import 'package:test_sa/new_views/swipe_module/dialoge/success_dialog.dart';
// import 'package:test_sa/new_views/swipe_module/enums/swipe_type.dart';
// import 'package:test_sa/new_views/swipe_module/models/swipe_model.dart';
// import 'package:test_sa/new_views/swipe_module/swipe_success_view.dart';
// import 'package:test_sa/new_views/swipe_module/utils/location_utils.dart';
// import 'package:test_sa/new_views/swipe_module/utils/swipe_general_utils.dart';
// import 'package:wifi_iot/wifi_iot.dart';
// todo @sikander delete this file after compelte
// class MarkAttendanceWidget extends StatefulWidget {
// double topPadding;
// bool isFromDashboard;
//
// MarkAttendanceWidget({Key key, this.topPadding = 0, this.isFromDashboard = false}) : super(key: key);
//
// // todo MarkAttendanceWidget(this.model, {Key? key, this.topPadding = 0, this.isFromDashboard = false}) : super(key: key);
//
// @override
// _MarkAttendanceWidgetState createState() {
// return _MarkAttendanceWidgetState();
// }
// }
//
// class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
// bool isNfcEnabled = false, isQrEnabled = false, isWifiEnabled = false;
// UserProvider _userProvider;
//
// int _locationUpdateCbId = 0;
//
// @override
// void initState() {
// super.initState();
// checkAttendanceAvailability();
// }
//
// void checkAttendanceAvailability() async {
// _userProvider = Provider.of<UserProvider>(context, listen: false);
// bool isAvailable = await NfcManager.instance.isAvailable();
// log('backend enabled values are nfc ${_userProvider.user.enableNFC} qr ${_userProvider.user.enableQR} wifi ${_userProvider.user.enableWifi}');
// setState(() {
// if (isAvailable && _userProvider.user.enableNFC) isNfcEnabled = true;
// if (_userProvider.user.enableQR) isQrEnabled = true;
// if (_userProvider.user.enableWifi) isWifiEnabled = true;
// });
// }
//
// void checkHuaweiLocationPermission(SwipeTypeEnum attendanceType, BuildContext context) async {
// // Permission_Handler permissionHandler = PermissionHandler();
// LocationUtilities.isEnabled((bool isEnabled) async {
// if (isEnabled) {
// LocationUtilities.havePermission((bool permission) async {
// if (permission) {
// getHuaweiCurrentLocation(attendanceType, context);
// } else {
// bool has = await requestPermissions();
// if (has) {
// getHuaweiCurrentLocation(attendanceType, context);
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () {
// Navigator.pop(context);
// },
// ),
// );
// }
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
//
// // if (await permissionHandler.hasLocationPermission()) {
// // getHuaweiCurrentLocation(attendanceType);
// // } else {
// // bool has = await requestPermissions();
// // if (has) {
// // getHuaweiCurrentLocation(attendanceType);
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to give location permission to mark attendance",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // }
// // }
// }
//
// Future<bool> requestPermissions() async {
// var result = await [
// Permission.location,
// ].request();
// return (result[Permission.location] == PermissionStatus.granted || result[Permission.locationAlways] == PermissionStatus.granted);
// }
//
// @override
// void dispose() {
// super.dispose();
// // Stop Session
// NfcManager.instance.stopSession();
// }
//
// @override
// Widget build(BuildContext context) {
// return Container(
// padding: EdgeInsets.only(left: 21, right: 21, bottom: 21, top: widget.topPadding),
// decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
// width: double.infinity,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// 20.height,
// 'click me '.heading5(context).custom(color: AppColor.textStyleColor(context)),
// // LocaleKeys.markAttendance.tr().toSectionHeading(),
// // LocaleKeys.selectMethodOfAttendance.tr().toText11(color: const Color(0xff535353)),
// GridView(
// physics: const NeverScrollableScrollPhysics(),
// shrinkWrap: true,
// padding: const EdgeInsets.only(bottom: 0, top: 21),
// gridDelegate:
// SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
// children: availableAttendanceMethodList(context: context),
// )
// ],
// ),
// );
// }
//
// void handleSwipe({
// SwipeTypeEnum swipeType,
// @required bool isEnable,
// @required BuildContext context,
// }) {
// // if (AppState().getIsHuawei) {
// if (false) {
// checkHuaweiLocationPermission(swipeType, context);
// } else {
// LocationUtilities.isEnabled((bool isEnabled) {
// if (isEnabled) {
// LocationUtilities.havePermission((bool permission) {
// if (permission) {
// SwipeGeneralUtils.showLoading(context);
// LocationUtilities.getCurrentLocation(
// (Position position, bool isMocked) {
// if (isMocked) {
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.markFakeAttendance(swipeType.name, position.latitude.toString() ?? "", position.longitude.toString() ?? "", context);
// } else {
// SwipeGeneralUtils.hideLoading(context);
// //todo performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// handleSwipeOperation(swipeType: swipeType, lat: position.latitude, lang: position.longitude);
// }
// },
// () {
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// },
// context,
// );
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to give location permission to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openAppSettings();
// },
// ),
// );
// }
// });
// } else {
// showDialog(
// context: context,
// builder: (BuildContext cxt) => ConfirmDialog(
// message: "You need to enable location services to mark attendance",
// onTap: () async {
// Navigator.pop(context);
// await Geolocator.openLocationSettings();
// },
// ),
// );
// }
// });
// }
// }
//
// void handleSwipeOperation({@required SwipeTypeEnum swipeType, double lat, double lang, BuildContext context}) {
// switch (swipeType) {
// case SwipeTypeEnum.NFC:
// handleNfcAttendance(latitude: lat, longitude: lang, context: context);
// return;
// case SwipeTypeEnum.QR:
// performQrCodeAttendance(latitude: lat, longitude: lang, context: context);
// return;
// case SwipeTypeEnum.Wifi:
// //TODO need to implement.
// return;
// }
// }
//
// void getHuaweiCurrentLocation(SwipeTypeEnum attendanceType, BuildContext context) async {
// try {
// SwipeGeneralUtils.showLoading(context);
// FusedLocationProviderClient locationService = FusedLocationProviderClient()..initFusedLocationService();
// LocationRequest locationRequest = LocationRequest();
// locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
// locationRequest.interval = 500;
// List<LocationRequest> locationRequestList = <LocationRequest>[locationRequest];
// LocationSettingsRequest locationSettingsRequest = LocationSettingsRequest(requests: locationRequestList);
//
// StreamSubscription<Location> _streamSubscription;
// int requestCode = (await (locationService.requestLocationUpdates(locationRequest)));
//
// _streamSubscription = locationService.onLocationData.listen(
// (Location location) async {
// SwipeGeneralUtils.hideLoading(context);
// await locationService.removeLocationUpdates(requestCode);
// handleSwipeOperation(swipeType: attendanceType);
// requestCode = 0;
// },
// );
//
// // locationService.checkLocationSettings(locationSettingsRequest).then((settings) async {
// // await locationService.getLastLocation().then((value) {
// // if (value.latitude == null || value.longitude == null) {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "Unable to get your location, Please check your location settings & try again.",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // } else {
// // if (attendanceType == "QR") {
// // performQrCodeAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // if (attendanceType == "WIFI") {
// // performWifiAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // if (attendanceType == "NFC") {
// // performNfcAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
// // }
// // }
// // }).catchError((error) {
// // log("HUAWEI LOCATION getLastLocation ERROR!!!!!");
// // log(error);
// // });
// // }).catchError((error) {
// // log("HUAWEI LOCATION checkLocationSettings ERROR!!!!!");
// // log(error);
// // if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") {
// // // Location service not enabled.
// // }
// // });
// } catch (error) {
// log("HUAWEI LOCATION ERROR!!!!!");
// log('$error');
// SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.handleException(error, context, null);
// }
// }
//
// Future<void> handleNfcAttendance({double latitude = 0, double longitude = 0, BuildContext context}) async {
// final userProvider = Provider.of<UserProvider>(context, listen: false);
//
// if (Platform.isIOS) {
// SwipeGeneralUtils.readNFc(onRead: (String nfcId) async {
// await _processNfcAttendance(userProvider, nfcId, latitude, longitude, context);
// });
// } else {
// showNfcReader(context, onNcfScan: (String nfcId) async {
// await _processNfcAttendance(userProvider, nfcId ?? '', latitude, longitude, context);
// });
// }
// }
//
// Future<void> _processNfcAttendance(
// UserProvider userProvider,
// String nfcId,
// double latitude,
// double longitude,
// BuildContext context,
// ) async {
// SwipeGeneralUtils.showLoading(context);
// try {
// // final swipeModel = Swipe(
// // swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(),
// // value: nfcId,
// // latitude: latitude,
// // longitude: longitude,
// // );
// //Test model...
// final swipeModel = Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: '123', latitude: 24.70865415364271, longitude: 46.66600861881879);
// final swipeResponse = await userProvider.makeSwipe(model: swipeModel);
// if (swipeResponse.isSuccess) {
// if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// SwipeGeneralUtils.hideLoading(context);
// Navigator.pushNamed(context, SwipeSuccessView.routeName);
// } else {
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.showErrorDialog(message: swipeResponse.message ?? "Unexpected error occurred", context: context);
// }
// } catch (errSwipeGeneralUtilsor) {
// SwipeGeneralUtils.hideLoading(context);
// // Uncomment below line for error handling if needed
// // SwipeGeneralUtils.handleException(error, context, null);
// }
// }
//
// Future<bool> closeWifiRequest() async {
// if (Platform.isAndroid) {
// await WiFiForIoTPlugin.forceWifiUsage(false);
// }
// return await WiFiForIoTPlugin.disconnect();
// }
//
// Future<void> performQrCodeAttendance({double latitude, double longitude, BuildContext context}) async {
// UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
// var qrCodeValue = await Navigator.of(context).push(
// MaterialPageRoute(
// builder: (BuildContext context) => QrScannerDialog(),
// ),
// );
// if (qrCodeValue != null) {
// SwipeGeneralUtils.showLoading(context);
// try {
// //test model..
// final swipeModel = Swipe(
// swipeTypeValue: SwipeTypeEnum.QR.getIntFromSwipeTypeEnum(),
// value: '2323',
// latitude: 24.70865415364271,
// longitude: 46.66600861881879,
// );
// final swipeResponse = await userProvider.makeSwipe(model: swipeModel);
// if (swipeResponse.isSuccess) {
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.showMDialog(context, backgroundColor: Colors.transparent, isDismissable: true, child: SuccessDialog(widget.isFromDashboard));
// } else {
// SwipeGeneralUtils.hideLoading(context);
// showDialog(
// barrierDismissible: true,
// context: context,
// builder: (cxt) => ConfirmDialog(
// message: swipeResponse.message ?? "",
// onTap: () {
// Navigator.pop(context);
// },
// onCloseTap: () {}
// ),
// );
// }
// } catch (ex) {
// SwipeGeneralUtils.hideLoading(context);
// }
// }
// }
//
// List<Widget> availableAttendanceMethodList({@required BuildContext context}) {
// List<Widget> availableMethods = [];
// if (isNfcEnabled) {
// availableMethods.add(attendanceMethod(SwipeTypeEnum.NFC.name, 'nfc_icon', isNfcEnabled, () {
// handleSwipe(swipeType: SwipeTypeEnum.NFC, isEnable: isNfcEnabled, context: context);
// }));
// }
// if (isQrEnabled) {
// availableMethods.add(attendanceMethod(SwipeTypeEnum.QR.name, 'wifi_icon', isQrEnabled, () {
// handleSwipe(swipeType: SwipeTypeEnum.QR, isEnable: isQrEnabled, context: context);
// }));
// }
// if (isWifiEnabled) {
// availableMethods.add(attendanceMethod(SwipeTypeEnum.Wifi.name, 'wifi_icon', isWifiEnabled, () {
// handleSwipe(swipeType: SwipeTypeEnum.Wifi, isEnable: isWifiEnabled, context: context);
// }));
// }
// return availableMethods;
// }
//
// Widget attendanceMethod(String title, String icon, bool isEnabled, VoidCallback onPress) {
// return Container(
// padding: EdgeInsets.all(12),
// decoration: BoxDecoration(
// color: Colors.white,
// borderRadius: BorderRadius.circular(18),
// border: Border.all(color: AppColor.white40, width: 2),
// ),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// icon.toSvgAsset(),
// title.heading5(context).custom(color: AppColor.neutral50),
// // Text(
// // title,
// // style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500),
// // ),
// ],
// ),
// ).onPress(
// () {
// log('isEnabled is ${!isEnabled}');
// if (!isEnabled) return;
// onPress();
// },
// );
// // return Container(
// // decoration: BoxDecoration(
// // borderRadius: BorderRadius.circular(15),
// // color: isEnabled ? null : Colors.grey.withOpacity(.5),
// // gradient: isEnabled
// // ? const LinearGradient(
// // transform: GradientRotation(.64),
// // begin: Alignment.topRight,
// // end: Alignment.bottomLeft,
// // colors: [
// // //ToDo set Colors according to design provided by designer...
// // Colors.blue,
// // Colors.green,
// // // AppColor.gradiantEndColor,
// // // MyColors.gradiantStartColor,
// // ],
// // )
// // : null,
// // ),
// // clipBehavior: Clip.antiAlias,
// // padding: const EdgeInsets.only(left: 10, right: 10, top: 14, bottom: 14),
// // child: Column(
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // // SvgPicture.asset(image, color: Colors.white, alignment: Alignment.topLeft).expanded,
// // Icon(iconData, color: isEnabled ? AppColor.black35 : Colors.grey),
// // title.heading6(context),
// // // title.toText17(isBold: true, color: Colors.white),
// // ],
// // ),
// // ).onPress(
// // () {
// // log('isEnabled is ${!isEnabled}');
// // if (!isEnabled) return;
// // onPress();
// // },
// // );
// }
// }
//
// // Widget customListItem({required String icon, required String heading, required String subHeading, required VoidCallback onTap}) {
// // return GestureDetector(
// // onTap: onTap, // Handles the tap
// // child: Card(
// // shape: RoundedRectangleBorder(
// // borderRadius: BorderRadius.circular(14), // Circular border radius
// // ),
// // color: Colors.white,
// // child: Row(
// // crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top
// // children: [
// // // Icon Section
// // icon
// // .toSvgAsset(
// // width: 32,
// // color: AppColor.neutral120,
// // height: 29,
// // )
// // .paddingOnly(top: 8),
// // 14.width,
// // Expanded(
// // child: Column(
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // Text(
// // heading,
// // style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50),
// // ),
// // 7.height,
// // Text(
// // subHeading,
// // style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
// // ),
// // ],
// // ).paddingOnly(end: 50),
// // ),
// // ],
// // ).paddingAll(12),
// // ),
// // );
// // }
//
// //qr older code...
//
// //nfc older code widget
//
// // // if (AppState().getIsHuawei) {
// // if (false) {
// // checkHuaweiLocationPermission(SwipeTypeEnum.NFC);
// // } else {
// // LocationUtilities.isEnabled((bool isEnabled) {
// // if (isEnabled) {
// // LocationUtilities.havePermission((bool permission) {
// // if (permission) {
// // SwipeGeneralUtils.showLoading(context);
// // LocationUtilities.getCurrentLocation(
// // (Position position, bool isMocked) {
// // if (isMocked) {
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? "",context);
// // } else {
// // SwipeGeneralUtils.hideLoading(context);
// // //todo performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// // }
// // },
// // () {
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// // },
// // context,
// // );
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to give location permission to mark attendance",
// // onTap: () async {
// // Navigator.pop(context);
// // await Geolocator.openAppSettings();
// // },
// // ),
// // );
// // }
// // });
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to enable location services to mark attendance",
// // onTap: () async {
// // Navigator.pop(context);
// // await Geolocator.openLocationSettings();
// // },
// // ),
// // );
// // }
// // });
// // }
//
// //older code....
// // Future<void> performNfcAttendance({double lat = 0, double lng = 0}) async {
// // UserProvider userProvider = Provider.of<UserProvider>(context,listen:false);
// // if (Platform.isIOS) {
// // SwipeGeneralUtils.readNFc(onRead: (String nfcId) async {
// // SwipeGeneralUtils.showLoading(context);
// // try {
// // SwipeModel swipeResponse = await userProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: '', latitude: lat, longitude: lng));
// // if (swipeResponse.responseCode != 1) {
// // SwipeGeneralUtils.hideLoading(context);
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: swipeResponse.message ?? "Unexpected error occurred",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // } else {
// // bool status = swipeResponse.data;
// // if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.showMDialog(
// // context,
// // backgroundColor: Colors.transparent,
// // isDismissable: true,
// // child: SuccessDialog(widget.isFromDashboard),
// // );
// // }
// // } catch (ex) {
// // SwipeGeneralUtils.hideLoading(context);
// // // SwipeGeneralUtils.handleException(ex, context, null);
// // }
// // });
// // } else {
// // showNfcReader(context, onNcfScan: (String nfcId) async {
// // SwipeGeneralUtils.showLoading(context);
// // try {
// // SwipeModel swipeResponse = await userProvider.makeSwipe(model: Swipe(swipeTypeValue: SwipeTypeEnum.NFC.getIntFromSwipeTypeEnum(), value: nfcId??'', latitude: lat, longitude: lng));
// // log('api response i got is ${swipeResponse.toJson()}');
// // if (swipeResponse.responseCode != 1) {
// // SwipeGeneralUtils.hideLoading(context);
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: swipeResponse.message ?? "Unexpected error occurred",
// // onTap: () {
// // Navigator.pop(context);
// // },
// // ),
// // );
// // } else {
// // bool status = swipeResponse.data; //use this status to get transactions.
// // if (Platform.isIOS) await Future.delayed(const Duration(seconds: 3));
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.showMDialog(
// // context,
// // backgroundColor: Colors.transparent,
// // isDismissable: true,
// // child: SuccessDialog(widget.isFromDashboard),
// // );
// // }
// // } catch (ex) {
// // SwipeGeneralUtils.hideLoading(context);
// // // SwipeGeneralUtils.handleException(ex, context, null);
// // }
// // // SwipeGeneralUtils.showLoading(context);
// // // try {
// // // GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
// // // if (g?.messageStatus != 1) {
// // // SwipeGeneralUtils.hideLoading(context);
// // // showDialog(
// // // context: context,
// // // builder: (BuildContext cxt) => ConfirmDialog(
// // // message: g?.errorEndUserMessage ?? "Unexpected error occurred",
// // // onTap: () {
// // // Navigator.pop(context);
// // // },
// // // ),
// // // );
// // // } else {
// // // bool status = await model.fetchAttendanceTracking(context);
// // // SwipeGeneralUtils.hideLoading(context);
// // // showMDialog(
// // // context,
// // // backgroundColor: Colors.transparent,
// // // isDismissable: false,
// // // child: SuccessDialog(widget.isFromDashboard),
// // // );
// // // }
// // // } catch (ex) {
// // // log(ex);
// // // SwipeGeneralUtils.hideLoading(context);
// // // // SwipeGeneralUtils.handleException(ex, context, (String msg) {
// // // // SwipeGeneralUtils.confirmDialog(context, msg);
// // // // });
// // // }
// // });
// // }
// // }
//
// //
// // Future<bool> checkSession() async {
// // try {
// // SwipeGeneralUtils.showLoading(context);
// // await DashboardApiClient().getOpenMissingSwipes();
// // SwipeGeneralUtils.hideLoading(context);
// // return true;
// // } catch (ex) {
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.handleException(ex, context, null);
// // return false;
// // }
// // }
//
// //TODO need to confirm ....
// Future<void> performWifiAttendance({double? latitude, double? lng}) async {
// // if (Platform.isAndroid) {
// // if (!(await checkSession())) {
// // return;
// // }
// // }
// SwipeGeneralUtils.showLoading(context);
// bool isConnected = await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "",
// password: AppState().getMohemmWifiPassword ?? "", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false);
//
// if (Platform.isIOS) {
// if (await WiFiForIoTPlugin.getSSID() == AppState().getMohemmWifiSSID) {
// isConnected = true;
// } else {
// isConnected = false;
// }
// }
//
// if (isConnected && AppState().isAuthenticated) {
// await WiFiForIoTPlugin.forceWifiUsage(true);
// await Future.delayed(const Duration(seconds: 6));
// try {
// GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng);
// bool status = await model.fetchAttendanceTracking(context);
// SwipeGeneralUtils.hideLoading(context);
// await closeWifiRequest();
// if (g?.messageStatus == 2) {
// showDialog(
// barrierDismissible: true,
// context: context,
// builder: (cxt) => ConfirmDialog(
// message: g?.errorEndUserMessage ?? "",
// onTap: () {
// Navigator.pop(context);
// },
// onCloseTap: () {},
// ),
// );
// } else {
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: false,
// child: SuccessDialog(widget.isFromDashboard),
// );
// }
// } catch (ex) {
// await closeWifiRequest();
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.handleException(ex, context, null);
// }
// } else {
// if (AppState().isAuthenticated) {
// SwipeGeneralUtils.hideLoading(context);
// SwipeGeneralUtils.confirmDialog(context, "LocaleKeys.comeNearHMGWifi.tr()");
// } else {
// await closeWifiRequest();
// }
// }
// }
//
// // older grid widget..
// // attendanceMethod(SwipeTypeEnum.NFC.name, Icons.nfc, isNfcEnabled, () {
// // handleSwipe(swipeType: SwipeTypeEnum.NFC, isEnable: isNfcEnabled);
// // }),
// // attendanceMethod(SwipeTypeEnum.QR.name, Icons.qr_code_2, isQrEnabled, () async {
// // handleSwipe(swipeType: SwipeTypeEnum.QR, isEnable: true);
// // }),
// // //if (isWifiEnabled) //todo
// // attendanceMethod(SwipeTypeEnum.Wifi.name, Icons.wifi, isWifiEnabled, () {
// // // if (AppState().getIsHuawei) {
// // if (false) {
// // checkHuaweiLocationPermission(SwipeTypeEnum.Wifi);
// // } else {
// // LocationUtilities.isEnabled((bool isEnabled) {
// // if (isEnabled) {
// // LocationUtilities.havePermission((bool permission) {
// // if (permission) {
// // SwipeGeneralUtils.showLoading(context);
// // LocationUtilities.getCurrentLocation(
// // (Position position, bool isMocked) {
// // if (isMocked) {
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? "", context);
// // } else {
// // SwipeGeneralUtils.hideLoading(context);
// // //todo performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// // }
// // },
// // () {
// // SwipeGeneralUtils.hideLoading(context);
// // SwipeGeneralUtils.confirmDialog(context, "Unable to determine your location, Please make sure that your location services are turned on & working.");
// // },
// // context,
// // );
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to give location permission to mark attendance",
// // onTap: () async {
// // Navigator.pop(context);
// // await Geolocator.openAppSettings();
// // },
// // ),
// // );
// // }
// // });
// // } else {
// // showDialog(
// // context: context,
// // builder: (BuildContext cxt) => ConfirmDialog(
// // message: "You need to enable location services to mark attendance",
// // onTap: () async {
// // Navigator.pop(context);
// // await Geolocator.openLocationSettings();
// // },
// // ),
// // );
// // }
// // });
// // }
// // }),

@ -47,87 +47,86 @@ class _SwipeHistoryViewState extends State<SwipeHistoryView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: const DefaultAppBar( appBar: const DefaultAppBar(title: 'Swipe History'),
title: 'Swipe History', body: SafeArea(
), child: Column(
body: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Row(
8.height, spacing: 8,
Row( children: [
children: [ ADatePicker(
ADatePicker( label: context.translation.from,
label: context.translation.from, date: dateFrom,
date: dateFrom, from: DateTime(DateTime.now().year - 5, DateTime.now().month, DateTime.now().day),
from: DateTime(DateTime.now().year - 5, DateTime.now().month, DateTime.now().day), formatDateWithTime: true,
formatDateWithTime: true, onDatePicker: (selectedDate) {
onDatePicker: (selectedDate) { if (selectedDate != null) {
if (selectedDate != null) { showThemedTimePicker(
showThemedTimePicker( context: context,
context: context, initialTime: TimeOfDay.now(),
initialTime: TimeOfDay.now(), ).then((selectedTime) {
).then((selectedTime) { // Handle the selected date and time here.
// Handle the selected date and time here. if (selectedTime != null) {
if (selectedTime != null) { DateTime selectedDateTime = DateTime(
DateTime selectedDateTime = DateTime( selectedDate.year,
selectedDate.year, selectedDate.month,
selectedDate.month, selectedDate.day,
selectedDate.day, selectedTime.hour,
selectedTime.hour, selectedTime.minute,
selectedTime.minute, );
); if (selectedDateTime != null) {
if (selectedDateTime != null) { setState(() {
setState(() { dateFrom = selectedDateTime;
dateFrom = selectedDateTime; });
}); }
} }
} });
}); }
} },
}, ).expanded,
).expanded, ADatePicker(
8.width, label: context.translation.to,
ADatePicker( date: dateTo,
label: context.translation.to, from: DateTime(DateTime.now().year - 5, DateTime.now().month, DateTime.now().day),
date: dateTo, formatDateWithTime: true,
from: DateTime(DateTime.now().year - 5, DateTime.now().month, DateTime.now().day), onDatePicker: (selectedDate) {
formatDateWithTime: true, if (selectedDate != null) {
onDatePicker: (selectedDate) { showThemedTimePicker(
if (selectedDate != null) { context: context,
showThemedTimePicker( initialTime: TimeOfDay.now(),
context: context, ).then((selectedTime) {
initialTime: TimeOfDay.now(), // Handle the selected date and time here.
).then((selectedTime) { if (selectedTime != null) {
// Handle the selected date and time here. DateTime selectedDateTime = DateTime(
if (selectedTime != null) { selectedDate.year,
DateTime selectedDateTime = DateTime( selectedDate.month,
selectedDate.year, selectedDate.day,
selectedDate.month, selectedTime.hour,
selectedDate.day, selectedTime.minute,
selectedTime.hour, );
selectedTime.minute, if (selectedDateTime != null) {
); setState(() {
if (selectedDateTime != null) { dateTo = selectedDateTime;
setState(() { });
dateTo = selectedDateTime; }
});
} }
} });
}); }
} },
}, ).expanded,
).expanded, ],
], ),
), 12.height,
12.height, AppFilledButton(label: context.translation.search, maxWidth: false, onPressed: getSwipeHistory),
AppFilledButton(label: context.translation.search, maxWidth: false, onPressed: getSwipeHistory), 8.height,
8.height, const Divider().defaultStyle(context),
const Divider().defaultStyle(context), Consumer<UserProvider>(builder: (context, snapshot, child) {
Consumer<UserProvider>(builder: (context, snapshot, child) { return SwipeHistoryList(snapshot.swipeHistory ?? [], snapshot.isLoading).expanded;
return SwipeHistoryList(snapshot.swipeHistory ?? [], snapshot.isLoading).expanded; }).expanded,
}), ],
], ).paddingOnly(start: 16, end: 16, top: 16),
).paddingAll(20), ),
); );
} }
} }
@ -143,7 +142,7 @@ class SwipeHistoryList extends StatelessWidget {
return (list.isEmpty && !isLoading) return (list.isEmpty && !isLoading)
? NoDataFound(message: context.translation.noDataFound).center ? NoDataFound(message: context.translation.noDataFound).center
: ListView.separated( : ListView.separated(
padding: EdgeInsets.only(top: 12.toScreenHeight), padding: const EdgeInsets.only(bottom: 16, top: 16),
itemBuilder: (cxt, index) { itemBuilder: (cxt, index) {
if (isLoading) return const SizedBox().toRequestShimmer(cxt, isLoading); if (isLoading) return const SizedBox().toRequestShimmer(cxt, isLoading);
return SwipeHistoryCard(list[index]); return SwipeHistoryCard(list[index]);

@ -29,6 +29,8 @@ import 'package:test_sa/new_views/swipe_module/enums/swipe_type.dart';
import 'package:test_sa/new_views/swipe_module/models/swipe_model.dart'; import 'package:test_sa/new_views/swipe_module/models/swipe_model.dart';
import 'package:test_sa/new_views/swipe_module/swipe_success_view.dart'; import 'package:test_sa/new_views/swipe_module/swipe_success_view.dart';
import 'package:test_sa/new_views/swipe_module/utils/location_utils.dart'; import 'package:test_sa/new_views/swipe_module/utils/location_utils.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/qr/scan_qr.dart'; import 'package:test_sa/views/widgets/qr/scan_qr.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
@ -125,18 +127,8 @@ class SwipeGeneralUtils {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
icon.toSvgAsset( icon.toSvgAsset(width: 24, height: 24, color: AppColor.icon2Color(context)),
color: isEnabled title.bodyText2(context).custom(color: AppColor.labelTextStyleColor(context), fontSize: context.isTablet() ? 10.toScreenWidth : null),
? context.isDark
? AppColor.neutral30
: AppColor.neutral50
: Colors.grey.withOpacity(0.5)),
title.heading5(context).custom(
color: isEnabled
? context.isDark
? AppColor.neutral30
: AppColor.neutral50
: Colors.grey.withOpacity(0.5)),
], ],
), ),
).onPress( ).onPress(
@ -826,9 +818,9 @@ class _SwipeTypeBottomSheetContentState extends State<_SwipeTypeBottomSheetConte
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
context.translation.markAttendance.heading5(context).custom(color: AppColor.headingTextColor(context)), InfoHeader16Widget("Mark Attendance"),
8.height, 8.height,
context.translation.selectMethodToMarkAttendance.bodyText2(context).custom(color: AppColor.lightTextColor(context)), InfoTextLabelWidget(label: context.translation.selectMethodToMarkAttendance),
12.height, 12.height,
GridView.builder( GridView.builder(
padding: const EdgeInsets.all(0), padding: const EdgeInsets.all(0),
@ -910,4 +902,3 @@ class _SwipeTypeItem {
required this.isEnabled, required this.isEnabled,
}); });
} }

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import '../new_views/app_style/app_color.dart';
class FullScreenImageViewer extends StatelessWidget { class FullScreenImageViewer extends StatelessWidget {
final Widget child; final Widget child;
@ -12,7 +14,23 @@ class FullScreenImageViewer extends StatelessWidget {
body: Stack( body: Stack(
children: [ children: [
InteractiveViewer(clipBehavior: Clip.none, panEnabled: true, minScale: 0.5, maxScale: 4.0, child: child).center, InteractiveViewer(clipBehavior: Clip.none, panEnabled: true, minScale: 0.5, maxScale: 4.0, child: child).center,
Positioned(top: MediaQuery.of(context).padding.top, left: 12.0, child: const Icon(Icons.clear).toShadowContainer(context, width: 40, padding: 8).onPress(() => Navigator.maybePop(context))), SafeArea(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: FloatingActionButton(
heroTag: "full-screen-image-viewer",
backgroundColor: AppColor.background(context),
onPressed: () => Navigator.maybePop(context),
hoverColor: Colors.transparent,
splashColor: Colors.transparent,
shape: RoundedRectangleBorder(
side: BorderSide(color: AppColor.borderColor(context)),
borderRadius: BorderRadius.circular(14.0),
),
child: Icon(Icons.clear, size: 24, color: AppColor.icon2Color(context)),
),
),
),
], ],
), ),
); );

@ -59,11 +59,12 @@ class _WoAutoCompleteFieldState extends State<WoAutoCompleteField> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10)); final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(16));
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.background(context), color: AppColor.background(context),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), border: Border.all(color: AppColor.border2Color(context), width: 1),
borderRadius: BorderRadius.circular(16),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
child: Autocomplete<WoByAssetIdModel>( child: Autocomplete<WoByAssetIdModel>(
@ -93,7 +94,7 @@ class _WoAutoCompleteFieldState extends State<WoAutoCompleteField> {
return TextField( return TextField(
controller: _controller, controller: _controller,
focusNode: fieldFocusNode, focusNode: fieldFocusNode,
style: AppTextStyles.bodyText.copyWith(color: AppColor.black10), style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 14, color: AppColor.textStyleColor(context)),
textAlign: TextAlign.start, textAlign: TextAlign.start,
decoration: InputDecoration( decoration: InputDecoration(
border: border, border: border,
@ -101,16 +102,16 @@ class _WoAutoCompleteFieldState extends State<WoAutoCompleteField> {
focusedBorder: border, focusedBorder: border,
enabledBorder: border, enabledBorder: border,
errorBorder: border, errorBorder: border,
contentPadding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 16.toScreenWidth), contentPadding: EdgeInsets.symmetric(vertical: 12.toScreenHeight, horizontal: 16.toScreenWidth),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(maxHeight: 24, maxWidth: 24 + 8), suffixIconConstraints: const BoxConstraints(maxHeight: 24, maxWidth: 24 + 8),
filled: true, filled: true,
enabled: widget.enabled, enabled: widget.enabled,
fillColor: AppColor.fieldBgColor(context), fillColor: AppColor.dropDownBackground(context),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.floatingTextStyleColor(context)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.labelTextStyleColor(context)),
labelText: "CM Work Order Number", labelText: "CM Work Order Number",
labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context)),
suffixIcon: loading ? const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 3.0).paddingOnly(end: 8) : null, suffixIcon: loading ? const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 3.0).paddingOnly(end: 8) : null,
), ),
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,

@ -279,10 +279,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> with SingleTickerProv
children: [ children: [
InfoHeader16Widget(assetModel?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"), InfoHeader16Widget(assetModel?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"),
if (context.userProvider.isEngineer && !(assetModel?.hasTrainingImageData ?? true)) if (context.userProvider.isEngineer && !(assetModel?.hasTrainingImageData ?? true))
Text( const InfoTextLabelWidget(label: '*Upload Images for this asset', color: AppColor.red30),
'*Upload Images for this asset',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
),
], ],
), ),
), ),

@ -133,6 +133,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> with SingleTickerProviderSt
IconButton( IconButton(
icon: Icon(!showListView ? Icons.view_list_sharp : Icons.grid_view_outlined, color: AppColor.icon2Color(context)), icon: Icon(!showListView ? Icons.view_list_sharp : Icons.grid_view_outlined, color: AppColor.icon2Color(context)),
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
iconSize: 20,
visualDensity: VisualDensity.compact, visualDensity: VisualDensity.compact,
tooltip: !showListView ? "View as List" : "View as Grid", tooltip: !showListView ? "View as List" : "View as Grid",
onPressed: () => setState(() { onPressed: () => setState(() {
@ -173,7 +174,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> with SingleTickerProviderSt
}, },
), ),
], ],
).paddingOnly(start: 16, end: 16), ).paddingOnly(start: 16, end: 8),
), ),
body: SafeArea( body: SafeArea(
child: LoadingManager( child: LoadingManager(
@ -313,7 +314,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> with SingleTickerProviderSt
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
heroTag: "some tag 2", heroTag: "some tag 2",
backgroundColor: AppColor.primary10, backgroundColor: AppColor.primary10,
child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: AppColor.background(context)), child: Icon(Icons.qr_code_2_rounded, size: 40, color: AppColor.addItemButtonColor(context)),
onPressed: () async { onPressed: () async {
String? result = await Navigator.of(context).push( String? result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()), MaterialPageRoute(builder: (_) => const ScanQr()),

@ -1,4 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
@ -34,16 +36,16 @@ class InfoTextWidget extends StatelessWidget {
"arrow_right".toSvgAsset(width: 17, color: AppColor.primary10), "arrow_right".toSvgAsset(width: 17, color: AppColor.primary10),
], ],
); );
} else if (copyValue) { } else if (copyValue && (value?.isNotEmpty ?? false)) {
// text = Row( text = Row(
// mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center,
// children: [ children: [
// Flexible(child: text), Flexible(child: text),
// const SizedBox(width: 4), 8.width,
// Icon(Icons.copy_rounded, color: AppColor.loadingColor(context), size: 12), const Icon(Icons.copy_rounded, color: AppColor.primary10, size: 14).onPress(() => Clipboard.setData(ClipboardData(text: value!))),
// ], ],
// ); );
} }
return text; return text;
} }
@ -52,13 +54,14 @@ class InfoTextWidget extends StatelessWidget {
class InfoTextLabelWidget extends StatelessWidget { class InfoTextLabelWidget extends StatelessWidget {
final String label; final String label;
final Color? color; final Color? color;
final TextStyle? textStyle;
InfoTextLabelWidget({required this.label, this.color, Key? key}) : super(key: key); const InfoTextLabelWidget({required this.label, this.color, this.textStyle, Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget text; Widget text;
text = Text(label, style: AppTextStyles.bodyText2.copyWith(color: color ?? AppColor.lightTextColor(context))); text = Text(label, style: (textStyle ?? AppTextStyles.bodyText2).copyWith(color: color ?? AppColor.lightTextColor(context)));
return text; return text;
} }
} }

@ -155,10 +155,16 @@ class _ScannerOverlay extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: FloatingActionButton( child: FloatingActionButton(
heroTag: "some tag 3", heroTag: "qr-scan",
backgroundColor: AppColor.background(context), backgroundColor: AppColor.background(context),
onPressed: onBack, onPressed: onBack,
child: Icon(Icons.arrow_back, size: 24.toScreenWidth, color: AppColor.icon2Color(context)), hoverColor: Colors.transparent,
splashColor: Colors.transparent,
shape: RoundedRectangleBorder(
side: BorderSide(color: AppColor.borderColor(context)),
borderRadius: BorderRadius.circular(14.0),
),
child: Icon(Icons.arrow_back, size: 24, color: AppColor.icon2Color(context)),
), ),
), ),
), ),

Loading…
Cancel
Save