From 4b5150eb69c474e6d7993fe9f9feb4cf30401f11 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 10 May 2026 15:12:40 +0300 Subject: [PATCH 1/9] icons added. --- assets/images/delete.svg | 3 +++ assets/images/edit_icon.svg | 8 ++++---- assets/images/wo/equipment_audit_wo.svg | 4 ++++ assets/images/wo/incident_wo.svg | 3 +++ assets/images/wo/system_audit_wo.svg | 4 ++++ assets/images/wo/task_wo.svg | 4 ++++ assets/images/wo/traf_wo.svg | 5 +++++ .../widgets/cleaner_checklist_widget.dart | 2 +- .../components/service_request_detail_view.dart | 7 ++++--- .../widgets/cleaner_checklist_widget.dart | 2 +- .../traf_module/create_traf_request_page.dart | 2 +- lib/new_views/app_style/app_color.dart | 2 ++ .../create_request_type_bottom_sheet.dart | 16 ++++++++-------- lib/views/widgets/equipment/asset_picker.dart | 6 +----- lib/views/widgets/timer/app_timer.dart | 2 +- 15 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 assets/images/delete.svg create mode 100644 assets/images/wo/equipment_audit_wo.svg create mode 100644 assets/images/wo/incident_wo.svg create mode 100644 assets/images/wo/system_audit_wo.svg create mode 100644 assets/images/wo/task_wo.svg create mode 100644 assets/images/wo/traf_wo.svg diff --git a/assets/images/delete.svg b/assets/images/delete.svg new file mode 100644 index 00000000..7fdfe788 --- /dev/null +++ b/assets/images/delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/edit_icon.svg b/assets/images/edit_icon.svg index 3b49167b..fda0002c 100644 --- a/assets/images/edit_icon.svg +++ b/assets/images/edit_icon.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/assets/images/wo/equipment_audit_wo.svg b/assets/images/wo/equipment_audit_wo.svg new file mode 100644 index 00000000..613c2a1a --- /dev/null +++ b/assets/images/wo/equipment_audit_wo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/wo/incident_wo.svg b/assets/images/wo/incident_wo.svg new file mode 100644 index 00000000..def3594b --- /dev/null +++ b/assets/images/wo/incident_wo.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/wo/system_audit_wo.svg b/assets/images/wo/system_audit_wo.svg new file mode 100644 index 00000000..bc1990f7 --- /dev/null +++ b/assets/images/wo/system_audit_wo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/wo/task_wo.svg b/assets/images/wo/task_wo.svg new file mode 100644 index 00000000..a9504573 --- /dev/null +++ b/assets/images/wo/task_wo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/wo/traf_wo.svg b/assets/images/wo/traf_wo.svg new file mode 100644 index 00000000..92a07332 --- /dev/null +++ b/assets/images/wo/traf_wo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart b/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart index 9f6f117b..12d22165 100644 --- a/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart +++ b/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart @@ -368,7 +368,7 @@ class _CleanerChecklistWidgetState extends State { borderRadius: BorderRadius.circular(30), //boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), - child: const Icon(Icons.delete_rounded, color: Color(0xffF63939))) + child: "delete".toSvgAsset()) .onPress(() { widget.onImageCaptured?.call(null); }); diff --git a/lib/modules/cm_module/views/components/service_request_detail_view.dart b/lib/modules/cm_module/views/components/service_request_detail_view.dart index e61a2591..01a5ac5c 100644 --- a/lib/modules/cm_module/views/components/service_request_detail_view.dart +++ b/lib/modules/cm_module/views/components/service_request_detail_view.dart @@ -22,6 +22,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; +import 'package:test_sa/views/widgets/item_views/info_text_widget.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/sound/sound_player.dart'; @@ -505,7 +506,7 @@ class _ServiceRequestDetailViewState extends State { style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ).expanded, if (!provider.isReadOnlyRequest) - "edit_icon".toSvgAsset(height: 21, width: 21, color: context.isDark ? AppColor.primary10 : null).onPress(() async { + "edit_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() async { provider.refreshTimer = false; await Navigator.push(context, MaterialPageRoute(builder: (context) => CostDetailFormScreen(isEdit: true))); provider.refreshTimer = true; @@ -551,7 +552,7 @@ class _ServiceRequestDetailViewState extends State { ], ), ], - ).toShadowContainer(context, padding: 12); + ).toShadowContainer(context); } Widget assetRetiredButton({required BuildContext context}) { @@ -560,7 +561,7 @@ class _ServiceRequestDetailViewState extends State { child: AppFilledButton( label: context.translation.assetToBeRetired, maxWidth: true, - buttonColor: Colors.white54, + buttonColor: AppColor.background(context), textColor: AppColor.red30, showBorder: true, onPressed: () async { diff --git a/lib/modules/export_module/widgets/cleaner_checklist_widget.dart b/lib/modules/export_module/widgets/cleaner_checklist_widget.dart index 9f6f117b..12d22165 100644 --- a/lib/modules/export_module/widgets/cleaner_checklist_widget.dart +++ b/lib/modules/export_module/widgets/cleaner_checklist_widget.dart @@ -368,7 +368,7 @@ class _CleanerChecklistWidgetState extends State { borderRadius: BorderRadius.circular(30), //boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), - child: const Icon(Icons.delete_rounded, color: Color(0xffF63939))) + child: "delete".toSvgAsset()) .onPress(() { widget.onImageCaptured?.call(null); }); diff --git a/lib/modules/traf_module/create_traf_request_page.dart b/lib/modules/traf_module/create_traf_request_page.dart index 8a7f5435..ce3818f4 100644 --- a/lib/modules/traf_module/create_traf_request_page.dart +++ b/lib/modules/traf_module/create_traf_request_page.dart @@ -308,7 +308,7 @@ class _CreateTRAFRequestPageState extends State { title: Text("Name: ${userBasedOnSearch[index].userName ?? ""}"), subtitle: Text( "Position: ${userBasedOnSearch[index].position ?? "-"}\nEmail: ${userBasedOnSearch[index].email ?? ""}\nPhone: ${userBasedOnSearch[index].phoneNumber ?? ""}"), - trailing: const Icon(Icons.delete_rounded, color: Color(0xffF63939), size: 20).onPress(() { + trailing: "delete".toSvgAsset().onPress(() { userBasedOnSearch.removeAt(index); setState(() {}); }), diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart index e5a249b0..1a021c19 100644 --- a/lib/new_views/app_style/app_color.dart +++ b/lib/new_views/app_style/app_color.dart @@ -90,6 +90,8 @@ class AppColor { static const Color orange60 = Color(0xff886400); static const Color orange70 = Color(0xffFFC945); static const Color orange80 = Color(0xff65531B); + static const Color yellowBgColor = Color(0xffF4DC92); + static const Color yellowTextColor = Color(0xff65531B); // new UI colors diff --git a/lib/new_views/pages/land_page/create_request_type_bottom_sheet.dart b/lib/new_views/pages/land_page/create_request_type_bottom_sheet.dart index 5fa4e229..7c1bdb87 100644 --- a/lib/new_views/pages/land_page/create_request_type_bottom_sheet.dart +++ b/lib/new_views/pages/land_page/create_request_type_bottom_sheet.dart @@ -115,26 +115,26 @@ class CreateRequestModel { // } // }); if (context.userProvider.isQualityUser && context.settingProvider.isUserFlowMedical) { - list.add(CreateRequestModel("Equipment Internal Audit Checklist".addTranslation, "add_icon", CreateEquipmentInternalAuditForm.id)); - list.add(CreateRequestModel("System Internal Audit Checklist".addTranslation, "add_icon", CreateSystemInternalAuditForm.id)); + list.add(CreateRequestModel("Equipment Internal Audit Checklist".addTranslation, "wo/equipment_audit_wo", CreateEquipmentInternalAuditForm.id)); + list.add(CreateRequestModel("System Internal Audit Checklist".addTranslation, "wo/system_audit_wo", CreateSystemInternalAuditForm.id)); } else if (context.userProvider.isAssessor && context.settingProvider.isUserFlowMedical) { - list.add(CreateRequestModel("TRAF".addTranslation, "add_icon", CreateTRAFRequestPage.id)); + list.add(CreateRequestModel("TRAF".addTranslation, "wo/traf_wo", CreateTRAFRequestPage.id)); } else if (context.userProvider.isEngineer) { if (Provider.of(context, listen: false).engineerCanCreateCM) { list.add(CreateRequestModel(context.translation.correctiveMaintenance, "wo/cm_wo", CreateCMRequest.id)); } //TODO uncommit this to enable task. - list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); + list.add(CreateRequestModel(context.translation.task, "wo/task_wo", CreateTaskView.id)); //Need to add check from permission Api. if ((context.settingProvider.isUserFlowMedical)) { - list.add(CreateRequestModel('Medical Gas'.addTranslation, "add_icon", CreateMedicalGasRequestPage.id)); + list.add(CreateRequestModel('Medical Gas'.addTranslation, "wo/gas_refill_wo", CreateMedicalGasRequestPage.id)); } } else { list.add(CreateRequestModel(context.translation.correctiveMaintenance, "wo/cm_wo", CreateCMRequest.id)); list.add(CreateRequestModel(context.translation.gasRefill, "wo/gas_refill_wo", GasRefillRequestForm.routeName)); list.add(CreateRequestModel(context.translation.transferAsset, "wo/device_transfer_wo", CreateDeviceTransferRequest.id)); - list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); + list.add(CreateRequestModel(context.translation.task, "wo/task_wo", CreateTaskView.id)); // context.userProvider.modulesPermissionsList.forEach((module) { // if (module.module!.value! == 9) { // list.add(CreateRequestModel("TRAF".addTranslation, "add_icon", CreateTRAFRequestPage.id)); @@ -149,14 +149,14 @@ class CreateRequestModel { context.userProvider.modulesPermissionsList.forEach((module) { if (module.module!.value! == 9 && (module.canAdd ?? false)) { - list.add(CreateRequestModel("TRAF".addTranslation, "add_icon", CreateTRAFRequestPage.id)); + list.add(CreateRequestModel("TRAF".addTranslation, "wo/traf_wo", CreateTRAFRequestPage.id)); } if (module.module!.value! == 15 && (module.canAdd ?? false)) { list.add(CreateRequestModel('Demo Request'.addTranslation, "wo/demo_wo", CreateDemoRequestPage.id)); } }); if (!context.userProvider.isNurse && context.settingProvider.isUserFlowMedical) { - list.add(CreateRequestModel("Incident Management", "add_icon", CreateIncidentRequestPage.id)); + list.add(CreateRequestModel("Incident Management", "wo/incident_wo", CreateIncidentRequestPage.id)); } return list; } diff --git a/lib/views/widgets/equipment/asset_picker.dart b/lib/views/widgets/equipment/asset_picker.dart index d94d0d2b..fcb827d5 100644 --- a/lib/views/widgets/equipment/asset_picker.dart +++ b/lib/views/widgets/equipment/asset_picker.dart @@ -199,11 +199,7 @@ class AssetPicker extends StatelessWidget { }), if (multiSelection) ...[ 4.width, - const Icon( - Icons.delete_rounded, - color: Color(0xffF63939), - size: 20, - ).onPress(() { + "delete".toSvgAsset().onPress(() { onAssetRemove!(device.id!.toInt()); }), ] diff --git a/lib/views/widgets/timer/app_timer.dart b/lib/views/widgets/timer/app_timer.dart index dfbe4f14..b9c314e2 100644 --- a/lib/views/widgets/timer/app_timer.dart +++ b/lib/views/widgets/timer/app_timer.dart @@ -278,7 +278,7 @@ class _AppTimerState extends State { ], ).expanded, 8.width, - const Icon(Icons.delete_rounded, size: 20, color: Color(0xffF63939)).onPress(() { + "delete".toSvgAsset().onPress(() { deletePickerTime(); }) ], From eba5552bc8c01c56b29561608c3893f2bfc0e39b Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 10 May 2026 15:17:31 +0300 Subject: [PATCH 2/9] improvement. --- .../cm_module/views/components/activities_list_view.dart | 8 ++++---- .../cm_module/views/components/asset_detail_card.dart | 2 +- .../cm_module/views/components/initial_visit_card.dart | 7 ++++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/modules/cm_module/views/components/activities_list_view.dart b/lib/modules/cm_module/views/components/activities_list_view.dart index 920676d6..e52fbd95 100644 --- a/lib/modules/cm_module/views/components/activities_list_view.dart +++ b/lib/modules/cm_module/views/components/activities_list_view.dart @@ -137,11 +137,11 @@ class _ActivitiesListViewState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { + "edit_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() { editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity); }), 24.width, - "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { + "delete_icon".toSvgAsset(height: 24, width: 24).onPress(() async { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); if (status == 200) { @@ -239,11 +239,11 @@ class _ActivitiesListViewState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { + "edit_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() { editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity); }), 24.width, - "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { + "delete_icon".toSvgAsset(height: 24, width: 24).onPress(() async { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); int status = await requestDetailProvider.deleteActivityMaintenance(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); if (status == 200) { diff --git a/lib/modules/cm_module/views/components/asset_detail_card.dart b/lib/modules/cm_module/views/components/asset_detail_card.dart index 4352b1e6..68061d46 100644 --- a/lib/modules/cm_module/views/components/asset_detail_card.dart +++ b/lib/modules/cm_module/views/components/asset_detail_card.dart @@ -52,7 +52,7 @@ class AssetDetailCard extends StatelessWidget { ), //hide if status is closed or complete . if (!requestDetailProvider.isReadOnlyRequest) - "edit_icon".toSvgAsset(height: 21, width: 21, color: context.isDark ? AppColor.primary10 : null).onPress(() async { + "edit_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() async { requestDetailProvider.refreshTimer = false; await Navigator.push(context, MaterialPageRoute(builder: (context) => VerifyAssetDetails(isEdit: true))); requestDetailProvider.refreshTimer = true; diff --git a/lib/modules/cm_module/views/components/initial_visit_card.dart b/lib/modules/cm_module/views/components/initial_visit_card.dart index 5ae963c2..7c464140 100644 --- a/lib/modules/cm_module/views/components/initial_visit_card.dart +++ b/lib/modules/cm_module/views/components/initial_visit_card.dart @@ -24,6 +24,7 @@ class _InitialVisitCardState extends State { void initState() { super.initState(); } + @override Widget build(BuildContext context) { return Consumer(builder: (context, CMDetailProvider requestDetailProvider, snapshot) { @@ -38,12 +39,12 @@ class _InitialVisitCardState extends State { ), Row( children: [ - "reminder_icon".toSvgAsset(height: 21, width: 21).onPress(() { + "reminder_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() { ServiceRequestBottomSheet.getReminderTimeList(context: context); ServiceRequestBottomSheet.initialVisitReminderBottomSheet(context: context, reminder: requestDetailProvider.currentWorkOrder?.data?.setReminder); }), 24.width, - "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { + "edit_icon".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)).onPress(() { ServiceRequestBottomSheet.initialVisitBottomSheet(context: context); }), ], @@ -56,7 +57,7 @@ class _InitialVisitCardState extends State { requestDetailProvider.needVisitHelperModel!.comment!.bodyText2(context).custom(color: AppColor.neutral120), ] ], - ).toShadowContainer(context,margin:const EdgeInsets.only(top: 12)); + ).toShadowContainer(context, margin: const EdgeInsets.only(top: 12)); }); } } From 14b4c3f1ba241846b85de7f976d1d796a113a57d Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 10 May 2026 16:02:22 +0300 Subject: [PATCH 3/9] improvements. --- lib/extensions/widget_extensions.dart | 2 +- .../notifications/notifications_list.dart | 2 +- .../widgets/item_views/info_text_widget.dart | 8 +++-- .../notifications/notification_item.dart | 29 +++++-------------- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index ff457b1d..63c90ebb 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -202,5 +202,5 @@ extension WidgetExtensions on Widget { } extension DividerExtension on Divider { - Divider defaultStyle(BuildContext context) => Divider(thickness: 1, color: context.isDarkNotListen ? AppColor.neutral20 : AppColor.neutral30); + Divider defaultStyle(BuildContext context) => Divider(thickness: 1, color: AppColor.borderColor(context)); } diff --git a/lib/views/pages/user/notifications/notifications_list.dart b/lib/views/pages/user/notifications/notifications_list.dart index e82a2fb5..db311261 100644 --- a/lib/views/pages/user/notifications/notifications_list.dart +++ b/lib/views/pages/user/notifications/notifications_list.dart @@ -29,7 +29,7 @@ class NotificationsList extends StatelessWidget { physics: const NeverScrollableScrollPhysics(), padding: const EdgeInsets.all(0), itemCount: notifications.length, - separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 16, bottom: 16), + separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 4, bottom: 4), itemBuilder: (context, itemIndex) { return NotificationItem( notification: notifications[itemIndex], diff --git a/lib/views/widgets/item_views/info_text_widget.dart b/lib/views/widgets/item_views/info_text_widget.dart index 846b1052..ecf71002 100644 --- a/lib/views/widgets/item_views/info_text_widget.dart +++ b/lib/views/widgets/item_views/info_text_widget.dart @@ -8,16 +8,18 @@ class InfoTextWidget extends StatelessWidget { final String label; final bool showEmptyValue; final bool showArrow; + final bool isMsg; - InfoTextWidget({required this.label, this.value, this.showEmptyValue = false, this.showArrow = false, Key? key}) : super(key: key); + InfoTextWidget({required this.label, this.value, this.showEmptyValue = false, this.showArrow = false, this.isMsg = false, Key? key}) : super(key: key); @override Widget build(BuildContext context) { Widget text; + String aLabel = label + (isMsg ? "" : ":"); if (showEmptyValue) { - text = Text('$label: ${value ?? ""}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); + text = Text('$aLabel ${value ?? ""}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); } else if (value?.isNotEmpty ?? false) { - text = Text('$label: $value', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); + text = Text('$aLabel $value', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); } else { text = const SizedBox(); } diff --git a/lib/views/widgets/notifications/notification_item.dart b/lib/views/widgets/notifications/notification_item.dart index 71135557..ba6c6cb2 100644 --- a/lib/views/widgets/notifications/notification_item.dart +++ b/lib/views/widgets/notifications/notification_item.dart @@ -6,15 +6,18 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/system_notification_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/views/widgets/item_views/info_date_widget.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/requests/request_status.dart'; class NotificationItem extends StatelessWidget { final SystemNotificationModel notification; final Function(SystemNotificationModel) onPressed; - final bool isLoading; + bool isLoading; - const NotificationItem({Key? key, required this.notification, required this.onPressed, this.isLoading = false}) : super(key: key); + NotificationItem({Key? key, required this.notification, required this.onPressed, this.isLoading = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -42,28 +45,12 @@ class NotificationItem extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - notification.title ?? "", - style: AppTextStyles.heading6.copyWith( - color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, - ), - ).toShimmer(isShow: isLoading, context: context).expanded, + InfoHeaderWidget(notification.title ?? "").toShimmer(isShow: isLoading, context: context).expanded, 8.width, - Text( - notification.createdOn?.toServiceRequestCardFormat ?? "", - textAlign: TextAlign.right, - style: AppTextStyles.tinyFont.copyWith( - color: context.isDark ? AppColor.neutral20 : AppColor.neutral50, - ), - ).toShimmer(isShow: isLoading, context: context), + if (notification.createdOn?.isNotEmpty ?? false) InfoDateWidget(notification.createdOn!).toShimmer(isShow: isLoading, context: context), ], ), - Text( - notification.text ?? "", - style: AppTextStyles.bodyText2.copyWith( - color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575), - ), - ).toShimmer(isShow: isLoading, context: context), + InfoTextWidget(label: notification.text ?? "", isMsg: true, showEmptyValue: true).toShimmer(isShow: isLoading, context: context), ], ).onPress(() { onPressed(notification); From 59ad837864ce2e4cf2c7d5a5b11cba493dbb4b3b Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 10 May 2026 16:39:59 +0300 Subject: [PATCH 4/9] improvements. --- lib/modules/cm_module/cm_detail_page.dart | 6 +- .../multiple_selection_fullscreen_dialog.dart | 62 ++++++++----------- .../selection_fullscreen_dialog.dart | 9 ++- 3 files changed, 34 insertions(+), 43 deletions(-) diff --git a/lib/modules/cm_module/cm_detail_page.dart b/lib/modules/cm_module/cm_detail_page.dart index dfd6707a..78a48f54 100644 --- a/lib/modules/cm_module/cm_detail_page.dart +++ b/lib/modules/cm_module/cm_detail_page.dart @@ -174,11 +174,7 @@ class _CMDetailPageState extends State { return const SizedBox(); } }), - // Print Button - IconButton( - icon: const Icon(Icons.print), - onPressed: _handlePrint, - ), + IconButton(icon: "download".toSvgAsset(height: 24, width: 24, color: AppColor.icon2Color(context)), padding: EdgeInsets.zero, onPressed: _handlePrint), IconButton( icon: const Icon(Icons.home), onPressed: () { diff --git a/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart b/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart index 8e7abf36..bc6da6f9 100644 --- a/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart +++ b/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart @@ -133,41 +133,33 @@ class _SelectionBottomSheetState extends State extends State extends State Date: Sun, 10 May 2026 17:48:48 +0300 Subject: [PATCH 5/9] improvements. --- lib/extensions/widget_extensions.dart | 4 +- lib/main.dart | 2 +- lib/new_views/pages/land_page/land_page.dart | 2 +- .../equipment/asset_item_gridview.dart | 28 ++++++------ .../equipment/asset_item_listview.dart | 43 +++++++++---------- ...device_picker.dart => my_assets_page.dart} | 2 +- lib/views/widgets/equipment/pick_asset.dart | 2 +- .../selection_fullscreen_dialog.dart | 2 +- 8 files changed, 43 insertions(+), 42 deletions(-) rename lib/views/widgets/equipment/{single_device_picker.dart => my_assets_page.dart} (99%) diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 63c90ebb..bc5f3c8a 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -116,7 +116,7 @@ extension WidgetExtensions on Widget { double borderRadius = 14, bool withShadow = true, Color? backgroundColor, - Color borderColor = Colors.transparent, + Color? borderColor, double padding = 12, EdgeInsets? paddingObject, EdgeInsets? margin, @@ -128,7 +128,7 @@ extension WidgetExtensions on Widget { width: double.infinity, decoration: ShapeDecoration( color: backgroundColor ?? AppColor.background(context), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius), side: BorderSide(color: AppColor.borderColor(context))), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius), side: BorderSide(color: borderColor ?? AppColor.borderColor(context))), shadows: showShadow ? [boxShadowR14] : null, ), child: this, diff --git a/lib/main.dart b/lib/main.dart index c240cefa..c10bc2c1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -114,7 +114,7 @@ import 'package:test_sa/views/pages/user/profile_page.dart'; import 'package:test_sa/views/update_available_screen.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart'; -import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; +import 'package:test_sa/views/widgets/equipment/my_assets_page.dart'; import 'package:timezone/data/latest_all.dart' as tz; import 'package:timezone/timezone.dart' as tz; diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index a495d8c1..a52085a0 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -22,7 +22,7 @@ import 'package:test_sa/new_views/pages/land_page/my_request/my_requests_page.da import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/pages/settings_page.dart'; import 'package:test_sa/providers/work_order/vendor_provider.dart'; -import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; +import 'package:test_sa/views/widgets/equipment/my_assets_page.dart'; import '../../../controllers/providers/settings/setting_provider.dart'; import '../../../views/widgets/dialogs/dialog.dart'; diff --git a/lib/views/widgets/equipment/asset_item_gridview.dart b/lib/views/widgets/equipment/asset_item_gridview.dart index cc463097..4947d46d 100644 --- a/lib/views/widgets/equipment/asset_item_gridview.dart +++ b/lib/views/widgets/equipment/asset_item_gridview.dart @@ -5,6 +5,7 @@ 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/models/device/asset.dart'; +import 'package:test_sa/views/widgets/item_views/info_text_widget.dart'; import '../../../new_views/app_style/app_color.dart'; @@ -41,20 +42,23 @@ class AssetItemGridView extends StatelessWidget { device.modelDefinition!.assetName!.cleanupWhitespace.capitalizeFirstOfEach, maxLines: 2, overflow: TextOverflow.ellipsis, - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + style: AppTextStyles.bodyText.copyWith(color: AppColor.textStyleColor(context)), ), Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - "${context.translation.assetNumber} : ${device.assetNumber}".bodyText2(context), - "${context.translation.modelName} : ${device.modelDefinition!.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText2(context), - Text( - "${context.translation.serialNo} : ${device.assetSerialNo}", - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), - ).expanded, + // "${context.translation.assetNumber} : ${device.assetNumber}".bodyText2(context), + // "${context.translation.modelName} : ${device.modelDefinition!.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText2(context), + // Text( + // "${context.translation.serialNo} : ${device.assetSerialNo}", + // maxLines: 2, + // overflow: TextOverflow.ellipsis, + // style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), + // ).expanded, + InfoTextWidget(label: context.translation.assetNumber, value: device.assetNumber), + InfoTextWidget(label: context.translation.modelName, value: device.modelDefinition!.modelName), + InfoTextWidget(label: context.translation.serialNo, value: device.assetSerialNo), ], ).expanded, Row( @@ -62,15 +66,15 @@ class AssetItemGridView extends StatelessWidget { children: [ Text( 'View Details', - style: AppTextStyles.bodyText2.copyWith(color: AppColor.blueStatus(context)), + style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), ), 4.width, - Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) + const Icon(Icons.arrow_forward, color: AppColor.primary10, size: 14) ], ), ], ).expanded ], - ).onPress(() => onPressed(device)).toShadowContainer(context,padding: 12); + ).onPress(() => onPressed(device)).toShadowContainer(context); } } diff --git a/lib/views/widgets/equipment/asset_item_listview.dart b/lib/views/widgets/equipment/asset_item_listview.dart index f2aab423..e5fe91e9 100644 --- a/lib/views/widgets/equipment/asset_item_listview.dart +++ b/lib/views/widgets/equipment/asset_item_listview.dart @@ -6,6 +6,8 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/new_views/app_style/app_color.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'; class AssetItemListView extends StatelessWidget { final Asset device; @@ -24,14 +26,14 @@ class AssetItemListView extends StatelessWidget { width: 95, height: 95, decoration: ShapeDecoration( - color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + color: AppColor.dropDownBackground(context), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10), side: BorderSide(color: AppColor.border2Color(context))), image: DecorationImage( fit: BoxFit.cover, image: NetworkImage(device.assetPhoto != null ? URLs.getFileUrl(device.assetPhoto!)! : "https://www.lasteelcraft.com/images/no-image-available.png"), )), ), - 15.width, + 12.width, Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, @@ -40,38 +42,33 @@ class AssetItemListView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - device.modelDefinition!.assetName!.cleanupWhitespace.capitalizeFirstOfEach.heading6(context), - 8.height, - "${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context), - "${context.translation.modelName} : ${device.modelDefinition!.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText(context), + InfoHeaderWidget(device.modelDefinition!.assetName!.cleanupWhitespace), + // device.modelDefinition!.assetName!.cleanupWhitespace.capitalizeFirstOfEach.heading6(context), + 4.height, + InfoTextWidget(label: context.translation.assetNumber, value: device.assetNumber), + InfoTextWidget(label: context.translation.modelName, value: device.modelDefinition!.modelName), + InfoTextWidget(label: context.translation.serialNo, value: device.assetSerialNo), + // "${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context), + // "${context.translation.modelName} : ${device.modelDefinition!.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText(context), ], ), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - "${context.translation.serialNo} : ${device.assetSerialNo}".bodyText(context).expanded, - 4.width, - selectButton ?? + Align( + alignment: Alignment.bottomRight, + child: selectButton ?? Row( mainAxisSize: MainAxisSize.min, children: [ Text( context.translation.viewDetails, - style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)), + style: AppTextStyles.bodyText2.copyWith(color: AppColor.blueStatus(context)), ), 4.width, - Icon( - Icons.arrow_forward, - color: AppColor.blueStatus(context), - size: 14, - ) + const Icon(Icons.arrow_forward, color: AppColor.primary10, size: 14) ], - ), - ], - ) + )) ], ).expanded ], - ).toShadowContainer(context, padding: 12, borderColor: isSelected ? AppColor.blueStatus(context) : Colors.transparent).onPress(() => onPressed(device)); + ).toShadowContainer(context, borderColor: isSelected ? AppColor.primary10 : Colors.transparent).onPress(() => onPressed(device)); } } diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/my_assets_page.dart similarity index 99% rename from lib/views/widgets/equipment/single_device_picker.dart rename to lib/views/widgets/equipment/my_assets_page.dart index 62aca8c9..ff85da41 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/my_assets_page.dart @@ -192,7 +192,7 @@ class _MyAssetsPageState extends State { ? ListView.separated( padding: const EdgeInsets.all(16), itemCount: _searchableList.length, - separatorBuilder: (listContext, itemIndex) => 8.height, + separatorBuilder: (listContext, itemIndex) => 12.height, itemBuilder: (listContext, itemIndex) { return AssetItemListView( device: _searchableList[itemIndex], diff --git a/lib/views/widgets/equipment/pick_asset.dart b/lib/views/widgets/equipment/pick_asset.dart index f5d0f4ff..4d9c08d6 100644 --- a/lib/views/widgets/equipment/pick_asset.dart +++ b/lib/views/widgets/equipment/pick_asset.dart @@ -3,7 +3,7 @@ import 'package:test_sa/extensions/context_extension.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/views/widgets/equipment/single_device_picker.dart'; +import 'package:test_sa/views/widgets/equipment/my_assets_page.dart'; import '../../../models/device/asset.dart'; import '../../../new_views/app_style/app_color.dart'; diff --git a/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart index 2ae7ea48..47cfa0f9 100644 --- a/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart +++ b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart @@ -149,7 +149,7 @@ class _SelectionBottomSheetState extends State Date: Mon, 11 May 2026 08:35:06 +0300 Subject: [PATCH 6/9] filter chips added. --- .../device_transfer/device_filter_screen.dart | 31 +- .../my_request/all_requests_filter_page.dart | 34 +- .../my_request/my_requests_page.dart | 323 +++++++++++++++++- .../widgets/equipment/my_assets_page.dart | 298 +++++++++++++++- 4 files changed, 650 insertions(+), 36 deletions(-) diff --git a/lib/modules/tm_module/device_transfer/device_filter_screen.dart b/lib/modules/tm_module/device_transfer/device_filter_screen.dart index 5eef3a5a..899ba68d 100644 --- a/lib/modules/tm_module/device_transfer/device_filter_screen.dart +++ b/lib/modules/tm_module/device_transfer/device_filter_screen.dart @@ -75,22 +75,21 @@ class _DeviceFilterScreenState extends State { title: context.translation.filter, actions: [ if (loading == false && _showResetButton()) - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - context.translation.reset, - style: AppTextStyles.bodyText2.copyWith(color: AppColor.loadingColor(context)), - ).paddingAll(8).onPress(() { - setState(() { - startDate = null; - endDate = null; - _selectedDepartments = []; - _selectedSites = []; - }); - }), - ], - ) + TextButton( + onPressed: () { + setState(() { + startDate = null; + endDate = null; + _selectedDepartments = []; + _selectedSites = []; + }); + }, + style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), + child: Text( + 'Clear Filters', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), + ), + ).paddingOnly(start: 16, end: 16) ], ), body: Column( diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 53a4089a..b4e06e08 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -141,24 +141,22 @@ class _AllRequestsFilterPageState extends State { title: context.translation.filter, actions: [ if (_showResetButton()) - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - context.translation.reset, - style: AppTextStyles.bodyText2.copyWith(color: AppColor.loadingColor(context)), - ).paddingAll(8).onPress(() { - Provider.of(context, listen: false).searchedModel = null; - setState(() { - search?.statuses?.clear(); - search?.typeTransaction?.clear(); - search?.startDate = null; - search?.endDate = null; - search?.isArchived = false; - }); - }), - ], - ) + TextButton( + onPressed: () { + setState(() { + search?.statuses?.clear(); + search?.typeTransaction?.clear(); + search?.startDate = null; + search?.endDate = null; + search?.isArchived = false; + }); + }, + style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), + child: Text( + 'Clear Filters', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), + ), + ).paddingOnly(start: 16, end: 16) ], ), body: Column( diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index b8b0c850..c790758d 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -186,6 +186,7 @@ class _MyRequestsPageState extends State { body: Consumer(builder: (context, snapshot, _) { return Column( children: [ + if (!_filterIsEmpty()) _buildActiveFiltersChips(), if (_filterIsEmpty()) SizedBox( height: 50.toScreenHeight, @@ -255,11 +256,331 @@ class _MyRequestsPageState extends State { (_search!.sn?.value?.isNotEmpty ?? false) || (_search!.statuses?.isNotEmpty ?? false) || (_search!.startDate != null) || - (_search!.endDate != null)) { + (_search!.endDate != null) || + (_search!.selectedSortOption?.isNotEmpty ?? false)) { return false; } return true; } + + Widget _buildActiveFiltersChips() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + decoration: BoxDecoration( + color: AppColor.background(context), + border: Border( + bottom: BorderSide(color: AppColor.borderColor(context), width: 1), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Active Filters', + style: AppTextStyles.tinyFont2.copyWith(color: AppColor.labelTextStyleColor(context), fontWeight: FontWeight.w600), + ), + Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + spacing: 16, + children: [ + SizedBox( + height: 40.toScreenHeight, + child: ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.only(top: 8, right: 0, left: 0, bottom: 0), + itemBuilder: (cxt, index) => _getActiveFilterChips()[index], + separatorBuilder: (cxt, index) => 8.width, + itemCount: _getActiveFilterChips().length), + ).expanded, + TextButton( + onPressed: _clearAllFilters, + style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), + child: Text( + 'Clear Filters', + style: AppTextStyles.tinyFont.copyWith(color: AppColor.primary10, fontWeight: FontWeight.w500), + ), + ), + ], + ) + ], + ), + ); + } + + List _getActiveFilterChips() { + List chips = []; + + // Request Number + if (_search?.requestNumber?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.woNumber}: ${_search!.requestNumber!.value}', + onDelete: () { + setState(() { + _search!.requestNumber!.value = null; + _search!.requestNumber!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Asset Name + if (_search?.assetName?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.assetName}: ${_search!.assetName!.value}', + onDelete: () { + setState(() { + _search!.assetName!.value = null; + _search!.assetName!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Asset Number + if (_search?.assetNo?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.assetNo}: ${_search!.assetNo!.value}', + onDelete: () { + setState(() { + _search!.assetNo!.value = null; + _search!.assetNo!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Manufacturer + if (_search?.manufacture?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.manufacture}: ${_search!.manufacture!.value}', + onDelete: () { + setState(() { + _search!.manufacture!.value = null; + _search!.manufacture!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Serial Number + if (_search?.sn?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.sn}: ${_search!.sn!.value}', + onDelete: () { + setState(() { + _search!.sn!.value = null; + _search!.sn!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Model + if (_search?.model?.value?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.model}: ${_search!.model!.value}', + onDelete: () { + setState(() { + _search!.model!.value = null; + _search!.model!.controller?.clear(); + _refreshWithFilters(); + }); + }, + )); + } + + // Statuses + if (_search?.statuses?.isNotEmpty ?? false) { + for (var statusId in _search!.statuses!) { + String statusName = _getStatusName(statusId); + chips.add(_buildFilterChip( + label: 'Status: $statusName', + onDelete: () { + setState(() { + _search!.statuses!.remove(statusId); + _refreshWithFilters(); + }); + }, + )); + } + } + + // Type Transactions + if (_search?.typeTransaction?.isNotEmpty ?? false) { + for (var typeId in _search!.typeTransaction!) { + String typeName = _getTypeName(typeId); + chips.add(_buildFilterChip( + label: 'Type: $typeName', + onDelete: () { + setState(() { + _search!.typeTransaction!.remove(typeId); + _refreshWithFilters(); + }); + }, + )); + } + } + + // Date Range + if (_search?.startDate != null || _search?.endDate != null) { + String dateLabel = 'Date: '; + if (_search!.startDate != null && _search!.endDate != null) { + dateLabel += '${_formatDate(_search!.startDate!)} - ${_formatDate(_search!.endDate!)}'; + } else if (_search!.startDate != null) { + dateLabel += 'From ${_formatDate(_search!.startDate!)}'; + } else if (_search!.endDate != null) { + dateLabel += 'To ${_formatDate(_search!.endDate!)}'; + } + + chips.add(_buildFilterChip( + label: dateLabel, + onDelete: () { + setState(() { + _search!.startDate = null; + _search!.endDate = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Sort Option + if (_search?.selectedSortOption?.isNotEmpty ?? false) { + String sortLabel = 'Sort: ${_getSortLabel(_search!.selectedSortOption!)}'; + chips.add(_buildFilterChip( + label: sortLabel, + showDelete: false, + )); + } + + return chips; + } + + Widget _buildFilterChip({required String label, VoidCallback? onDelete, bool showDelete = true}) { + return Theme( + data: Theme.of(context).copyWith(splashColor: Colors.transparent, highlightColor: Colors.transparent), + child: Chip( + backgroundColor: AppColor.backgroundTabBarColor(context), + side: BorderSide(color: AppColor.border2Color(context)), + label: Text(label), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)), + labelStyle: AppTextStyles.tinyFont2.copyWith(color: AppColor.labelTextStyleColor(context)), + deleteIconColor: showDelete ? AppColor.icon2Color(context) : null, + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onDeleted: showDelete ? onDelete : null, + ), + ); + } + + String _getStatusName(int statusId) { + switch (statusId) { + case 0: + return "All WO"; + case 1: + return context.translation.open; + case 2: + return context.translation.inProgress; + case 3: + return context.translation.closed; + case 4: + return context.translation.completed; + case 5: + return "Canceled"; + default: + return "Status $statusId"; + } + } + + String _getTypeName(int typeId) { + switch (typeId) { + case 1: + return context.translation.correctiveMaintenance; + case 2: + return context.translation.gasRefill; + case 3: + return context.translation.transferAsset; + case 4: + return context.translation.preventiveMaintenance; + case 5: + return context.translation.recurrentWo; + case 6: + return context.translation.taskRequest; + case 7: + return 'Recall and Alert'; + case 8: + return 'Asset Inventory'; + case 9: + return 'TRAF'; + case 10: + return 'Equipment Internal Audit'; + case 11: + return 'System Internal Audit'; + case 12: + return 'Loan Equipment'; + case 13: + return 'Asset Delivery'; + case 14: + return 'Medical Gas Inspection'; + case 15: + return 'Demo'; + case 16: + return 'Incidents'; + default: + return "Type $typeId"; + } + } + + String _formatDate(DateTime date) { + return '${date.day}/${date.month}/${date.year}'; + } + + String _getSortLabel(String sortOption) { + switch (sortOption.toLowerCase()) { + case 'ascending': + return 'Ascending'; + case 'descending': + return 'Descending'; + default: + return sortOption; + } + } + + void _clearAllFilters() { + setState(() { + _search?.requestNumber?.value = null; + _search?.requestNumber?.controller?.clear(); + _search?.assetName?.value = null; + _search?.assetName?.controller?.clear(); + _search?.assetNo?.value = null; + _search?.assetNo?.controller?.clear(); + _search?.manufacture?.value = null; + _search?.manufacture?.controller?.clear(); + _search?.sn?.value = null; + _search?.sn?.controller?.clear(); + _search?.model?.value = null; + _search?.model?.controller?.clear(); + _search?.statuses?.clear(); + _search?.typeTransaction?.clear(); + _search?.startDate = null; + _search?.endDate = null; + _search?.isArchived = false; + _search?.selectedSortOption = null; + _search = null; // Clear the entire search object + _provider?.searchedModel = null; + _refreshWithFilters(); + }); + } + + void _refreshWithFilters() { + _provider?.reset(); + _provider?.getAllRequests(context, typeTransaction: requestsList[selectedRequest].id, search: _search); + } } class Request { diff --git a/lib/views/widgets/equipment/my_assets_page.dart b/lib/views/widgets/equipment/my_assets_page.dart index ff85da41..b1d9ea91 100644 --- a/lib/views/widgets/equipment/my_assets_page.dart +++ b/lib/views/widgets/equipment/my_assets_page.dart @@ -94,7 +94,7 @@ class _MyAssetsPageState extends State { Navigator.of(context).pop(); }), Container( - height: 40, + height: 40.toScreenHeight, padding: const EdgeInsets.only(left: 16, right: 8), alignment: Alignment.center, decoration: ShapeDecoration( @@ -169,6 +169,7 @@ class _MyAssetsPageState extends State { }, child: Column( children: [ + if (!_filterIsEmpty()) _buildActiveFiltersChips(), Expanded( child: _searchableList.isEmpty ? NoDataFound(message: context.translation.noDeviceFound).center @@ -237,4 +238,299 @@ class _MyAssetsPageState extends State { ), ); } + + bool _filterIsEmpty() { + if (_searchAsset == null) return true; + if ((_searchAsset!.assetName?.isNotEmpty ?? false) || + (_searchAsset!.assetNo?.isNotEmpty ?? false) || + (_searchAsset!.assetSerialNumber?.isNotEmpty ?? false) || + (_searchAsset!.model?.isNotEmpty ?? false) || + (_searchAsset!.supplier?.isNotEmpty ?? false) || + (_searchAsset!.site?.isNotEmpty ?? false) || + (_searchAsset!.manufacturer?.isNotEmpty ?? false) || + (_searchAsset!.modelDefinition?.isNotEmpty ?? false) || + (_searchAsset!.departments?.isNotEmpty ?? false) || + (_searchAsset!.sites?.isNotEmpty ?? false) || + (_searchAsset!.supplyDateFrom != null) || + (_searchAsset!.supplyDateTo != null)) { + return false; + } + return true; + } + + Widget _buildActiveFiltersChips() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + decoration: BoxDecoration( + color: AppColor.background(context), + border: Border( + bottom: BorderSide(color: AppColor.borderColor(context), width: 1), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Active Filters', + style: AppTextStyles.tinyFont2.copyWith( + color: AppColor.labelTextStyleColor(context), + fontWeight: FontWeight.w600, + ), + ), + Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + spacing: 16, + children: [ + SizedBox( + height: 40.toScreenHeight, + child: ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.only(top: 8, right: 0, left: 0, bottom: 0), + itemBuilder: (cxt, index) => _getActiveFilterChips()[index], + separatorBuilder: (cxt, index) => 8.width, + itemCount: _getActiveFilterChips().length, + ), + ).expanded, + TextButton( + onPressed: _clearAllFilters, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + child: Text( + 'Clear Filters', + style: AppTextStyles.tinyFont.copyWith( + color: AppColor.primary10, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ) + ], + ), + ); + } + + List _getActiveFilterChips() { + List chips = []; + + // Asset Name + if (_searchAsset?.assetName?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.assetName}: ${_searchAsset!.assetName}', + onDelete: () { + setState(() { + _searchAsset!.assetName = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Asset Number + if (_searchAsset?.assetNo?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.assetNumber}: ${_searchAsset!.assetNo}', + onDelete: () { + setState(() { + _searchAsset!.assetNo = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Serial Number + if (_searchAsset?.assetSerialNumber?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.snNumber}: ${_searchAsset!.assetSerialNumber}', + onDelete: () { + setState(() { + _searchAsset!.assetSerialNumber = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Model + if (_searchAsset?.model?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.model}: ${_searchAsset!.model}', + onDelete: () { + setState(() { + _searchAsset!.model = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Supplier + if (_searchAsset?.supplier?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.supplier}: ${_searchAsset!.supplier}', + onDelete: () { + setState(() { + _searchAsset!.supplier = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Site (single) + if (_searchAsset?.site?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.site}: ${_searchAsset!.site}', + onDelete: () { + setState(() { + _searchAsset!.site = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Manufacturer + if (_searchAsset?.manufacturer?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.manufacture}: ${_searchAsset!.manufacturer}', + onDelete: () { + setState(() { + _searchAsset!.manufacturer = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Model Definition + if (_searchAsset?.modelDefinition?.isNotEmpty ?? false) { + chips.add(_buildFilterChip( + label: '${context.translation.md}: ${_searchAsset!.modelDefinition}', + onDelete: () { + setState(() { + _searchAsset!.modelDefinition = null; + _refreshWithFilters(); + }); + }, + )); + } + + // Departments (multiple) + if (_searchAsset?.departments?.isNotEmpty ?? false) { + for (var dept in _searchAsset!.departments!) { + chips.add(_buildFilterChip( + label: '${context.translation.byDepartment}: $dept', + onDelete: () { + setState(() { + _searchAsset!.departments!.remove(dept); + _refreshWithFilters(); + }); + }, + )); + } + } + + // Sites (multiple) + if (_searchAsset?.sites?.isNotEmpty ?? false) { + for (var site in _searchAsset!.sites!) { + chips.add(_buildFilterChip( + label: '${context.translation.bySite}: $site', + onDelete: () { + setState(() { + _searchAsset!.sites!.remove(site); + _refreshWithFilters(); + }); + }, + )); + } + } + + // Date Range + if (_searchAsset?.supplyDateFrom != null || _searchAsset?.supplyDateTo != null) { + String dateLabel = 'Supply Date: '; + if (_searchAsset!.supplyDateFrom != null && _searchAsset!.supplyDateTo != null) { + dateLabel += '${_formatDate(_searchAsset!.supplyDateFrom!)} - ${_formatDate(_searchAsset!.supplyDateTo!)}'; + } else if (_searchAsset!.supplyDateFrom != null) { + dateLabel += 'From ${_formatDate(_searchAsset!.supplyDateFrom!)}'; + } else if (_searchAsset!.supplyDateTo != null) { + dateLabel += 'To ${_formatDate(_searchAsset!.supplyDateTo!)}'; + } + + chips.add(_buildFilterChip( + label: dateLabel, + onDelete: () { + setState(() { + _searchAsset!.supplyDateFrom = null; + _searchAsset!.supplyDateTo = null; + _refreshWithFilters(); + }); + }, + )); + } + + return chips; + } + + Widget _buildFilterChip({required String label, required VoidCallback onDelete}) { + return Theme( + data: Theme.of(context).copyWith( + splashColor: Colors.transparent, + highlightColor: Colors.transparent, + ), + child: Chip( + backgroundColor: AppColor.backgroundTabBarColor(context), + side: BorderSide(color: AppColor.border2Color(context)), + label: Text(label), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30.0), + ), + labelStyle: AppTextStyles.tinyFont2.copyWith( + color: AppColor.labelTextStyleColor(context), + ), + deleteIconColor: AppColor.icon2Color(context), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onDeleted: onDelete, + ), + ); + } + + String _formatDate(String dateString) { + try { + final date = DateTime.parse(dateString); + return '${date.day}/${date.month}/${date.year}'; + } catch (e) { + return dateString; + } + } + + void _clearAllFilters() { + setState(() { + _searchAsset?.assetName = null; + _searchAsset?.assetNo = null; + _searchAsset?.assetSerialNumber = null; + _searchAsset?.model = null; + _searchAsset?.supplier = null; + _searchAsset?.site = null; + _searchAsset?.manufacturer = null; + _searchAsset?.modelDefinition = null; + _searchAsset?.departments?.clear(); + _searchAsset?.sites?.clear(); + _searchAsset?.supplyDateFrom = null; + _searchAsset?.supplyDateTo = null; + _searchAsset = null; + _refreshWithFilters(); + }); + } + + void _refreshWithFilters() { + _devicesProvider.reset(); + _devicesProvider.getAssets(search: _searchAsset); + _searchableList.clear(); + _searchableList.addAll(_devicesProvider.devices); + } } From c12a0ce88d58831021b3e571a9891c59d9cfd308 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 11 May 2026 08:44:17 +0300 Subject: [PATCH 7/9] bug fixes for clear filters. --- .../device_transfer/device_filter_screen.dart | 5 ++++- .../land_page/my_request/my_requests_page.dart | 1 + lib/views/widgets/equipment/my_assets_page.dart | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/modules/tm_module/device_transfer/device_filter_screen.dart b/lib/modules/tm_module/device_transfer/device_filter_screen.dart index 899ba68d..f03cc64a 100644 --- a/lib/modules/tm_module/device_transfer/device_filter_screen.dart +++ b/lib/modules/tm_module/device_transfer/device_filter_screen.dart @@ -45,6 +45,7 @@ class _DeviceFilterScreenState extends State { setState(() {}); startDate = filter.supplyDateFrom; endDate = filter.supplyDateTo; + _commissioningStatus = filter.assetStatus; final departmentProvider = Provider.of(context, listen: false); final siteProvider = Provider.of(context, listen: false); if (departmentProvider.items.isEmpty ?? true) await departmentProvider.getData(); @@ -82,6 +83,7 @@ class _DeviceFilterScreenState extends State { endDate = null; _selectedDepartments = []; _selectedSites = []; + _commissioningStatus = null; }); }, style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), @@ -183,6 +185,7 @@ class _DeviceFilterScreenState extends State { void _search() async { filter.sites = _selectedSites.map((site) => site.name ?? '').where((name) => name.isNotEmpty).toList(); filter.departments = _selectedDepartments.map((dept) => dept.name ?? '').where((name) => name.isNotEmpty).toList(); + filter.assetStatus = _commissioningStatus; filter.supplyDateFrom = startDate; filter.supplyDateTo = endDate; final deviceProvider = Provider.of(context, listen: false); @@ -194,6 +197,6 @@ class _DeviceFilterScreenState extends State { } bool _showResetButton() { - return (_selectedDepartments.isNotEmpty) || (_selectedSites.isNotEmpty) || (startDate != null) || (endDate != null); + return (_selectedDepartments.isNotEmpty) || (_selectedSites.isNotEmpty) || (_commissioningStatus != null) || (startDate != null) || (endDate != null); } } diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index c790758d..6e25f3c9 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -255,6 +255,7 @@ class _MyRequestsPageState extends State { (_search!.manufacture?.value?.isNotEmpty ?? false) || (_search!.sn?.value?.isNotEmpty ?? false) || (_search!.statuses?.isNotEmpty ?? false) || + (_search!.typeTransaction?.isNotEmpty ?? false) || (_search!.startDate != null) || (_search!.endDate != null) || (_search!.selectedSortOption?.isNotEmpty ?? false)) { diff --git a/lib/views/widgets/equipment/my_assets_page.dart b/lib/views/widgets/equipment/my_assets_page.dart index b1d9ea91..6d6ee224 100644 --- a/lib/views/widgets/equipment/my_assets_page.dart +++ b/lib/views/widgets/equipment/my_assets_page.dart @@ -251,6 +251,7 @@ class _MyAssetsPageState extends State { (_searchAsset!.modelDefinition?.isNotEmpty ?? false) || (_searchAsset!.departments?.isNotEmpty ?? false) || (_searchAsset!.sites?.isNotEmpty ?? false) || + (_searchAsset!.assetStatus != null) || (_searchAsset!.supplyDateFrom != null) || (_searchAsset!.supplyDateTo != null)) { return false; @@ -420,6 +421,19 @@ class _MyAssetsPageState extends State { )); } + // Asset Status (Commissioning Status) + if (_searchAsset?.assetStatus != null) { + chips.add(_buildFilterChip( + label: 'Status: ${_searchAsset!.assetStatus!.name ?? 'Unknown'}', + onDelete: () { + setState(() { + _searchAsset!.assetStatus = null; + _refreshWithFilters(); + }); + }, + )); + } + // Departments (multiple) if (_searchAsset?.departments?.isNotEmpty ?? false) { for (var dept in _searchAsset!.departments!) { @@ -518,6 +532,7 @@ class _MyAssetsPageState extends State { _searchAsset?.site = null; _searchAsset?.manufacturer = null; _searchAsset?.modelDefinition = null; + _searchAsset?.assetStatus = null; _searchAsset?.departments?.clear(); _searchAsset?.sites?.clear(); _searchAsset?.supplyDateFrom = null; From 5a61d52455d1000c6dae913001fce6eb7e880c81 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 11 May 2026 09:15:15 +0300 Subject: [PATCH 8/9] improvements --- .../pages/asset_inventory_form_view.dart | 2 +- .../pages/cleaner_request_item_view.dart | 2 +- .../forms/spare_part/spare_part_request.dart | 2 +- .../pm_module/ppm_wo/ppm_details_page.dart | 2 +- .../ppm_calibration_tools_form.dart | 2 +- .../update_ppm/ppm_external_details_form.dart | 2 +- .../update_ppm/ppm_pm_check_list_form.dart | 2 +- .../ppm_wo/update_ppm/ppm_pm_kits_form.dart | 2 +- .../device_transfer/device_filter_screen.dart | 204 +++++++++--------- .../device_transfer/device_search_screen.dart | 67 +++--- .../device_transfer_details.dart | 4 +- .../gas_refill/create_gas_refill_request.dart | 2 +- .../gas_refill/gas_refill_request_form.dart | 4 +- .../common_widgets/asset_info_card.dart | 2 +- lib/new_views/pages/help_center_page.dart | 2 +- .../calender_fragments/calendar_header.dart | 2 +- .../my_request/all_requests_filter_page.dart | 8 +- lib/new_views/pages/report_bug_page.dart | 2 +- lib/new_views/pages/settings_page.dart | 6 +- lib/new_views/pages/unsafe_device_view.dart | 2 +- .../swipe_module/mark_attendance_widget.dart | 2 +- lib/views/pages/user/profile_page.dart | 4 +- .../requests/create_service_request_page.dart | 2 +- .../asset_detail_bottom_sheet.dart | 2 +- .../widgets/equipment/asset_detail_page.dart | 2 +- ...buttons.dart => asset_status_buttons.dart} | 24 +-- .../multiple_selection_fullscreen_dialog.dart | 2 +- .../selection_fullscreen_dialog.dart | 2 +- 28 files changed, 179 insertions(+), 182 deletions(-) rename lib/views/widgets/equipment/{commissioning_status_buttons.dart => asset_status_buttons.dart} (86%) diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart index 5bf1ede2..52c7cfa2 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart @@ -92,7 +92,7 @@ class _AssetInventoryFormViewState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - 'Not Registered'.addTranslation.heading5(context), + 'Not Registered'.addTranslation.heading5(context).custom(color: AppColor.textStyleColor(context)), AdvancedSwitch( controller: registeredController, activeColor: AppColor.green50.withOpacity(0.5), diff --git a/lib/modules/cleaner_module/pages/cleaner_request_item_view.dart b/lib/modules/cleaner_module/pages/cleaner_request_item_view.dart index 96d0eb05..56f5d1bd 100644 --- a/lib/modules/cleaner_module/pages/cleaner_request_item_view.dart +++ b/lib/modules/cleaner_module/pages/cleaner_request_item_view.dart @@ -23,7 +23,7 @@ class CleanerRequestItemView extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - if (result.taskNo != null && result.taskNo!.isNotEmpty) result.taskNo!.heading5(context), + if (result.taskNo != null && result.taskNo!.isNotEmpty) result.taskNo!.heading5(context).custom(color: AppColor.textStyleColor(context)), if (result.createdDate != null) Text( result.createdDate!.split('T').first, diff --git a/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart b/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart index 289d4778..1821a20b 100644 --- a/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart +++ b/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart @@ -137,7 +137,7 @@ class _SparePartRequestState extends State with TickerProvider child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - context.translation.sparePartDetails.heading5(context), + context.translation.sparePartDetails.heading5(context).custom(color: AppColor.textStyleColor(context)), // 12.height, // SingleItemDropDownMenu( // context: context, diff --git a/lib/modules/pm_module/ppm_wo/ppm_details_page.dart b/lib/modules/pm_module/ppm_wo/ppm_details_page.dart index 85b1d569..1670fe26 100644 --- a/lib/modules/pm_module/ppm_wo/ppm_details_page.dart +++ b/lib/modules/pm_module/ppm_wo/ppm_details_page.dart @@ -90,7 +90,7 @@ class _PpmDetailsPageState extends State { ], ), 8.height, - planPreventiveVisit.assetName!.cleanupWhitespace.capitalizeFirstOfEach.heading5(context), + planPreventiveVisit.assetName!.cleanupWhitespace.capitalizeFirstOfEach.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, '${context.translation.assetNumber}: ${planPreventiveVisit.asset!.assetNumber}'.bodyText(context), '${context.translation.assetSN}: ${planPreventiveVisit.asset!.assetSerialNo}'.bodyText(context), diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_calibration_tools_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_calibration_tools_form.dart index ad460de5..34fedcad 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_calibration_tools_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_calibration_tools_form.dart @@ -80,7 +80,7 @@ class _PpmCalibrationToolsFormState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - (index == 0 ? "$currentIndex /$totalTabs . Calibration Tools" : "").heading5(context), + (index == 0 ? "$currentIndex /$totalTabs . Calibration Tools" : "").heading5(context).custom(color: AppColor.textStyleColor(context)), "trash".toSvgAsset(height: 20, width: 15).onPress(() { widget.models!.remove(model); setState(() {}); diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart index a3154b94..c6289512 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart @@ -134,7 +134,7 @@ class _ExternalDetailItemState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - (widget.index == 0 ? "1 /4 . External Details" : "").heading5(context), + (widget.index == 0 ? "1 /4 . External Details" : "").heading5(context).custom(color: AppColor.textStyleColor(context)), Container( height: 32, width: 32, diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_check_list_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_check_list_form.dart index 9f5b0e63..f27968c6 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_check_list_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_check_list_form.dart @@ -50,7 +50,7 @@ class _PpmPmChecklistFormState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (index == 0) ...[ - "$currentIndex /$totalTabs . PM Checklist".heading5(context), + "$currentIndex /$totalTabs . PM Checklist".heading5(context).custom(color: AppColor.textStyleColor(context)), 16.height, ], AppTextFormField( diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_kits_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_kits_form.dart index a25e4d4a..022c4125 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_kits_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_pm_kits_form.dart @@ -78,7 +78,7 @@ class _PpmPMKitsFormState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - (index == 0 ? "$currentIndex /$totalTabs . PM Kits" : "").heading5(context), + (index == 0 ? "$currentIndex /$totalTabs . PM Kits" : "").heading5(context).custom(color: AppColor.textStyleColor(context)), Container( height: 32, width: 32, diff --git a/lib/modules/tm_module/device_transfer/device_filter_screen.dart b/lib/modules/tm_module/device_transfer/device_filter_screen.dart index f03cc64a..0616e728 100644 --- a/lib/modules/tm_module/device_transfer/device_filter_screen.dart +++ b/lib/modules/tm_module/device_transfer/device_filter_screen.dart @@ -7,13 +7,14 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/site.dart'; +import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart'; import 'package:test_sa/providers/department_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/equipment/commissioning_status_buttons.dart'; +import 'package:test_sa/views/widgets/equipment/asset_status_buttons.dart'; import '../../../models/device/asset_search.dart'; import '../../../new_views/common_widgets/app_lazy_loading.dart'; @@ -69,115 +70,110 @@ class _DeviceFilterScreenState extends State { @override Widget build(BuildContext context) { - return SafeArea( - top: false, - child: Scaffold( - appBar: DefaultAppBar( - title: context.translation.filter, - actions: [ - if (loading == false && _showResetButton()) - TextButton( - onPressed: () { - setState(() { - startDate = null; - endDate = null; - _selectedDepartments = []; - _selectedSites = []; - _commissioningStatus = null; - }); + return Scaffold( + appBar: DefaultAppBar( + title: context.translation.filter, + actions: [ + if (loading == false && _showResetButton()) + TextButton( + onPressed: () { + setState(() { + startDate = null; + endDate = null; + _selectedDepartments = []; + _selectedSites = []; + _commissioningStatus = null; + }); + }, + style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), + child: Text( + 'Clear Filters', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), + ), + ).paddingOnly(start: 16, end: 16) + ], + ), + body: Column( + children: [ + ListView( + padding: const EdgeInsets.all(16), + children: [ + AssetStatusButtons( + initialValue: _commissioningStatus, + onSelect: (value) { + if (value != null) { + _commissioningStatus = value; + } + }, + ), + 16.height, + MultipleItemDropDownMenu( + context: context, + title: context.translation.byDepartment, + showAsBottomSheet: true, + backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, + // backgroundColor: AppColor.fieldBgColor(context), + showShadow: true, + height: 56.toScreenHeight, + showCancel: true, + onSelect: (value) { + if (value != null) { + setState(() { + _selectedDepartments = value; + }); + } }, - style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), - child: Text( - 'Clear Filters', - style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), - ), - ).paddingOnly(start: 16, end: 16) - ], - ), - body: Column( - children: [ - SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, + ), + 12.height, + MultipleItemDropDownMenu( + context: context, + title: context.translation.bySite, + showAsBottomSheet: true, + // backgroundColor: AppColor.fieldBgColor(context), + backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, + showShadow: true, + height: 56.toScreenHeight, + showCancel: true, + onSelect: (value) { + if (value != null) { + setState(() { + _selectedSites = value; + }); + } + }, + ), + 16.height, + context.translation.pmDateRange.heading5(context).custom(color: AppColor.textStyleColor(context)), + 8.height, + Row( children: [ - CommissioningStatusButtons( - initialValue: _commissioningStatus, - onSelect: (value) { - if (value != null) { - _commissioningStatus = value; - } - }, - ), - 16.height, - MultipleItemDropDownMenu( - context: context, - title: context.translation.byDepartment, - showAsBottomSheet: true, - backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, - // backgroundColor: AppColor.fieldBgColor(context), - showShadow: true, - height: 56.toScreenHeight, - showCancel: true, - onSelect: (value) { - if (value != null) { - setState(() { - _selectedDepartments = value; - }); - } + ADatePicker( + label: context.translation.to, + from: DateTime(2000), + date: DateTime.tryParse(startDate ?? ""), + onDatePicker: (date) { + setState(() { + startDate = date.toIso8601String(); + }); }, - ).paddingOnly(start: 16, end: 16), - 8.height, - MultipleItemDropDownMenu( - context: context, - title: context.translation.bySite, - showAsBottomSheet: true, - // backgroundColor: AppColor.fieldBgColor(context), - backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white, - showShadow: true, - height: 56.toScreenHeight, - showCancel: true, - onSelect: (value) { - if (value != null) { - setState(() { - _selectedSites = value; - }); - } + ).expanded, + 8.width, + ADatePicker( + label: context.translation.to, + from: DateTime(2000), + date: DateTime.tryParse(endDate ?? ""), + onDatePicker: (date) { + setState(() { + endDate = date.toIso8601String(); + }); }, - ).paddingOnly(start: 16, end: 16), - 16.height, - context.translation.pmDateRange.heading5(context).paddingOnly(start: 16, end: 16), - 8.height, - Row( - children: [ - ADatePicker( - label: context.translation.to, - from: DateTime(2000), - date: DateTime.tryParse(startDate ?? ""), - onDatePicker: (date) { - setState(() { - startDate = date.toIso8601String(); - }); - }, - ).expanded, - 8.width, - ADatePicker( - label: context.translation.to, - from: DateTime(2000), - date: DateTime.tryParse(endDate ?? ""), - onDatePicker: (date) { - setState(() { - endDate = date.toIso8601String(); - }); - }, - ).expanded, - ], - ).paddingOnly(start: 16, end: 16), + ).expanded, ], ), - ).expanded, - AppFilledButton(onPressed: _search, label: context.translation.applyFilter).paddingOnly(start: 16, end: 16), - ], - ).paddingOnly(top: 16, bottom: 16), + ], + ).expanded, + FooterActionButton.footerContainer(context: context, child: AppFilledButton(onPressed: _search, label: context.translation.applyFilter)), + ], ), ); } diff --git a/lib/modules/tm_module/device_transfer/device_search_screen.dart b/lib/modules/tm_module/device_transfer/device_search_screen.dart index 56768834..d9f99f8d 100644 --- a/lib/modules/tm_module/device_transfer/device_search_screen.dart +++ b/lib/modules/tm_module/device_transfer/device_search_screen.dart @@ -5,6 +5,8 @@ import 'package:test_sa/extensions/context_extension.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/modules/cm_module/views/components/action_button/footer_action_button.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; @@ -62,39 +64,38 @@ class _DeviceSearchScreenState extends State { title: context.translation.search, actions: [ if (_showResetButton()) - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - context.translation.reset, - style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), - ).paddingAll(8).onPress(() { - setState(() { - _assetNameController.text = ""; - _assetNumberController.text = ""; - _snController.text = ""; - _modelController.text = ""; - _supplierController.text = ""; - _siteController.text = ""; - _manufactureController.text = ""; - _mdController.text = ""; - }); - }), - ], - ) + TextButton( + onPressed: () { + setState(() { + _assetNameController.text = ""; + _assetNumberController.text = ""; + _snController.text = ""; + _modelController.text = ""; + _supplierController.text = ""; + _siteController.text = ""; + _manufactureController.text = ""; + _mdController.text = ""; + }); + }, + style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), + child: Text( + 'Clear Filters', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), + ), + ).paddingOnly(start: 16, end: 16), ], ), body: Form( key: _formKey, - child: Column( - children: [ - SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, + child: SafeArea( + child: Column( + children: [ + ListView( + padding: const EdgeInsets.all(16), children: [ - context.translation.searchBy.heading5(context), - 8.height, - context.translation.searchByDesc.bodyText(context), + context.translation.searchBy.heading5(context).custom(color: AppColor.textStyleColor(context)), + 4.height, + context.translation.searchByDesc.bodyText2(context).custom(color: AppColor.lightTextColor(context)), 16.height, AppTextFormField( controller: _assetNameController, @@ -215,11 +216,11 @@ class _DeviceSearchScreenState extends State { ), 8.height, ], - ), - ).expanded, - AppFilledButton(onPressed: _search, label: context.translation.search), - ], - ).paddingAll(16), + ).expanded, + FooterActionButton.footerContainer(context: context, child: AppFilledButton(onPressed: _search, label: context.translation.search)), + ], + ), + ), ), ); } diff --git a/lib/modules/tm_module/device_transfer/device_transfer_details.dart b/lib/modules/tm_module/device_transfer/device_transfer_details.dart index 00d6738e..acb1e613 100644 --- a/lib/modules/tm_module/device_transfer/device_transfer_details.dart +++ b/lib/modules/tm_module/device_transfer/device_transfer_details.dart @@ -252,7 +252,7 @@ class _DeviceTransferDetailsState extends State { ], ), 8.height, - context.translation.workOrderDetails.heading5(context), + context.translation.workOrderDetails.heading5(context).custom(color: AppColor.textStyleColor(context)), infoText(label: context.translation.destinationSite, value: _model?.senderSiteName), // infoText(label: "Sender Building".addTranslation, value: _model?.senderBuildingName), // infoText(label: "Sender Floor".addTranslation, value: _model?.senderFloorName), @@ -332,7 +332,7 @@ class _DeviceTransferDetailsState extends State { children: [ statusLabel ?? Container(), if (statusLabel != null) 8.height, - isSender ? context.translation.senderDetails.heading5(context) : context.translation.receiverDetails.heading5(context), + isSender ? context.translation.senderDetails.heading5(context) : context.translation.receiverDetails.heading5(context).custom(color: AppColor.textStyleColor(context)), ], ).expanded, if (context.userProvider.isEngineer || context.userProvider.isNurse) diff --git a/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart b/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart index fb1daeb8..6d2e7c90 100644 --- a/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart +++ b/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart @@ -242,7 +242,7 @@ class _RequestGasRefillState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - context.translation.gasRefill.heading5(context), + context.translation.gasRefill.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, '${context.translation.gasRequest}: ${widget.gasRefillModel!.gasRefillDetails![0].gasType!.name}'.bodyText(context), '${context.translation.cylinderType}: ${widget.gasRefillModel!.gasRefillDetails![0].cylinderType!.name}'.bodyText(context), diff --git a/lib/modules/tm_module/gas_refill/gas_refill_request_form.dart b/lib/modules/tm_module/gas_refill/gas_refill_request_form.dart index 1d61deca..8b6814c8 100644 --- a/lib/modules/tm_module/gas_refill/gas_refill_request_form.dart +++ b/lib/modules/tm_module/gas_refill/gas_refill_request_form.dart @@ -300,7 +300,7 @@ class _GasRefillRequestFormState extends State { // Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ -// (_gasModel.gasRefillDetails![index].gasType?.name ?? "").heading5(context), +// (_gasModel.gasRefillDetails![index].gasType?.name ?? "").heading5(context).custom(color: AppColor.textStyleColor(context)), // 8.height, // ("${context.translation.quantity}: ${_gasModel.gasRefillDetails![index].requestedQty}").bodyText(context), // ("${context.translation.cylinderSize}: ${_gasModel.gasRefillDetails![index].cylinderSize?.name}").bodyText(context), @@ -655,7 +655,7 @@ class _GasRefillRequestFormState extends State { // // Column( // // crossAxisAlignment: CrossAxisAlignment.start, // // children: [ -// // (_gasModel.gasRefillDetails![index].gasType?.name ?? "").heading5(context), +// // (_gasModel.gasRefillDetails![index].gasType?.name ?? "").heading5(context).custom(color: AppColor.textStyleColor(context)), // // 8.height, // // ("${context.translation.quantity}: ${_gasModel.gasRefillDetails![index].requestedQty}").bodyText(context), // // ("${context.translation.cylinderSize}: ${_gasModel.gasRefillDetails![index].cylinderSize?.name}").bodyText(context), diff --git a/lib/new_views/common_widgets/asset_info_card.dart b/lib/new_views/common_widgets/asset_info_card.dart index c3400768..c76c7a5b 100644 --- a/lib/new_views/common_widgets/asset_info_card.dart +++ b/lib/new_views/common_widgets/asset_info_card.dart @@ -16,7 +16,7 @@ class AssetInfoCard extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - (asset.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "").heading5(context), + (asset.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "").heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, "${context.translation.assetNo}: ${asset.assetNumber}".bodyText(context), "${context.translation.manufacture}: ${asset.modelDefinition?.manufacturerName}".bodyText(context), diff --git a/lib/new_views/pages/help_center_page.dart b/lib/new_views/pages/help_center_page.dart index d8c78acf..6b0d00ef 100644 --- a/lib/new_views/pages/help_center_page.dart +++ b/lib/new_views/pages/help_center_page.dart @@ -41,7 +41,7 @@ class HelpCenterPage extends StatelessWidget { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - title.heading5(context), + title.heading5(context).custom(color: AppColor.textStyleColor(context)), "arrow_right".toSvgAsset(width: 17), ], ); diff --git a/lib/new_views/pages/land_page/calender_fragments/calendar_header.dart b/lib/new_views/pages/land_page/calender_fragments/calendar_header.dart index fd0934e2..c65109c1 100644 --- a/lib/new_views/pages/land_page/calender_fragments/calendar_header.dart +++ b/lib/new_views/pages/land_page/calender_fragments/calendar_header.dart @@ -19,7 +19,7 @@ class CalendarHeader extends StatelessWidget { children: [ Row( children: [ - dateFormat.format(dateTime).heading5(context), + dateFormat.format(dateTime).heading5(context).custom(color: AppColor.textStyleColor(context)), 6.width, Align(alignment: AlignmentDirectional.centerEnd, child: Icon(Icons.keyboard_arrow_down_sharp, color: context.isDark ? AppColor.neutral10 : AppColor.neutral60, size: 24)), const Spacer(), diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index b4e06e08..61e4e63a 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -166,7 +166,7 @@ class _AllRequestsFilterPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - "WO Status".heading5(context), + "WO Status".heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, RequestsTypeFilter( initialValues: search?.statuses ?? [], @@ -183,7 +183,7 @@ class _AllRequestsFilterPageState extends State { }, ), 16.height, - "Type of WO".heading5(context), + "Type of WO".heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, RequestsTypeFilter( initialValues: search?.typeTransaction ?? [], @@ -194,7 +194,7 @@ class _AllRequestsFilterPageState extends State { }, ), 16.height, - context.translation.pickDate.heading5(context), + context.translation.pickDate.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, Row( children: [ @@ -226,7 +226,7 @@ class _AllRequestsFilterPageState extends State { ], ), 16.height, - // "Archived WO".heading5(context), + // "Archived WO".heading5(context).custom(color: AppColor.textStyleColor(context)), // // 8.height, // Row( // children: [ diff --git a/lib/new_views/pages/report_bug_page.dart b/lib/new_views/pages/report_bug_page.dart index f7df033b..55c1a380 100644 --- a/lib/new_views/pages/report_bug_page.dart +++ b/lib/new_views/pages/report_bug_page.dart @@ -31,7 +31,7 @@ class ReportBugPage extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - user.clientName!.heading5(context), + user.clientName!.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, "Call ID: ${0}".bodyText(context), "Date of Survey: ${DateFormat("dd MMM, yyyy").format(DateTime.now())}".bodyText(context), diff --git a/lib/new_views/pages/settings_page.dart b/lib/new_views/pages/settings_page.dart index 15bf5f98..790785b3 100644 --- a/lib/new_views/pages/settings_page.dart +++ b/lib/new_views/pages/settings_page.dart @@ -105,7 +105,7 @@ class _SettingsPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - context.translation.arabic.heading5(context), + context.translation.arabic.heading5(context).custom(color: AppColor.textStyleColor(context)), AdvancedSwitch( controller: langController, activeColor: AppColor.green50.withOpacity(0.5), @@ -127,7 +127,7 @@ class _SettingsPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - context.translation.lightTheme.heading5(context), + context.translation.lightTheme.heading5(context).custom(color: AppColor.textStyleColor(context)), AdvancedSwitch( controller: themeController, activeColor: AppColor.green50.withOpacity(0.5), @@ -158,7 +158,7 @@ class _SettingsPageState extends State { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Fingerprint/Face ID".heading5(context), + "Fingerprint/Face ID".heading5(context).custom(color: AppColor.textStyleColor(context)), customSwitch(localAuth).onPress(() { checkForLocalAuth(localAuth); }), diff --git a/lib/new_views/pages/unsafe_device_view.dart b/lib/new_views/pages/unsafe_device_view.dart index 6b482553..2f6d2f10 100644 --- a/lib/new_views/pages/unsafe_device_view.dart +++ b/lib/new_views/pages/unsafe_device_view.dart @@ -32,7 +32,7 @@ class _UnsafeDeviceScreenState extends State { // Center(child: Image.asset("assets/images/logos/main_mohemm_logo.png", width: 200, height: 50)), "logo".toSvgAsset(height: 64), 50.height, - "Sorry".heading5(context), + "Sorry".heading5(context).custom(color: AppColor.textStyleColor(context)), 21.height, "You are using Atoms app on an unsafe device. To be able to use the app with all it's features, Please make sure that the below points are considered: " .heading5(context).paddingOnly(start: 20, end: 20), diff --git a/lib/new_views/swipe_module/mark_attendance_widget.dart b/lib/new_views/swipe_module/mark_attendance_widget.dart index 6a6740e8..7ebe6b6a 100644 --- a/lib/new_views/swipe_module/mark_attendance_widget.dart +++ b/lib/new_views/swipe_module/mark_attendance_widget.dart @@ -144,7 +144,7 @@ // mainAxisSize: MainAxisSize.min, // children: [ // 20.height, -// 'click me '.heading5(context), +// 'click me '.heading5(context).custom(color: AppColor.textStyleColor(context)), // // LocaleKeys.markAttendance.tr().toSectionHeading(), // // LocaleKeys.selectMethodOfAttendance.tr().toText11(color: const Color(0xff535353)), // GridView( diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index 8c86ed1c..62911777 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -163,13 +163,13 @@ class _ProfilePageState extends State { // if ((_user.phoneNumber ?? "").isNotEmpty) ...[ // const Divider().defaultStyle(context), // 8.height, - // (_user.phoneNumber??"").heading5(context), + // (_user.phoneNumber??"").heading5(context).custom(color: AppColor.textStyleColor(context)), // 8.height, // ], // if ((_user.extensionNo ?? "").isNotEmpty) ...[ // const Divider().defaultStyle(context), // 8.height, - // _user.extensionNo!.heading5(context), + // _user.extensionNo!.heading5(context).custom(color: AppColor.textStyleColor(context)), // 8.height, // ], if ((_user.departmentName?.length ?? 0) > 0) const Divider().defaultStyle(context), diff --git a/lib/views/pages/user/requests/create_service_request_page.dart b/lib/views/pages/user/requests/create_service_request_page.dart index dee41f1f..3c94b7de 100644 --- a/lib/views/pages/user/requests/create_service_request_page.dart +++ b/lib/views/pages/user/requests/create_service_request_page.dart @@ -291,7 +291,7 @@ // // // Align( // // alignment: AlignmentDirectional.centerStart, -// // child: context.translation.callComments.heading5(context), +// // child: context.translation.callComments.heading5(context).custom(color: AppColor.textStyleColor(context)), // // ), // 8.height, // // SpeechToTextButton( diff --git a/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart index c0192cd1..fd203840 100644 --- a/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart @@ -23,7 +23,7 @@ class AssetDetailBottomSheet extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - (asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context), + (asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context).custom(color: AppColor.textStyleColor(context)), 16.height, AspectRatio( aspectRatio: 358 / 136, diff --git a/lib/views/widgets/equipment/asset_detail_page.dart b/lib/views/widgets/equipment/asset_detail_page.dart index f0b095fb..6db652dd 100644 --- a/lib/views/widgets/equipment/asset_detail_page.dart +++ b/lib/views/widgets/equipment/asset_detail_page.dart @@ -96,7 +96,7 @@ class _AssetDetailPageState extends State { backgroundColor: AppColor.getRequestStatusColorByName(context, assetModel.commissioningStatus!.name!), ), if (assetModel.commissioningStatus != null) 8.height, - (assetModel.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context), + (assetModel.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, Row( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/views/widgets/equipment/commissioning_status_buttons.dart b/lib/views/widgets/equipment/asset_status_buttons.dart similarity index 86% rename from lib/views/widgets/equipment/commissioning_status_buttons.dart rename to lib/views/widgets/equipment/asset_status_buttons.dart index e0ba6565..ca16d654 100644 --- a/lib/views/widgets/equipment/commissioning_status_buttons.dart +++ b/lib/views/widgets/equipment/asset_status_buttons.dart @@ -10,17 +10,17 @@ import '../../../models/lookup.dart'; import '../../../new_views/app_style/app_color.dart'; import '../../../providers/service_request_providers/commissioning_status_provider.dart'; -class CommissioningStatusButtons extends StatefulWidget { +class AssetStatusButtons extends StatefulWidget { final Function(Lookup?)? onSelect; final Lookup? initialValue; - const CommissioningStatusButtons({Key? key, this.onSelect, this.initialValue}) : super(key: key); + const AssetStatusButtons({Key? key, this.onSelect, this.initialValue}) : super(key: key); @override - State createState() => _CommissioningStatusButtonsState(); + State createState() => _AssetStatusButtonsState(); } -class _CommissioningStatusButtonsState extends State { +class _AssetStatusButtonsState extends State { int _selectedIndex = 0; @override @@ -36,7 +36,7 @@ class _CommissioningStatusButtonsState extends State } @override - void didUpdateWidget(covariant CommissioningStatusButtons oldWidget) { + void didUpdateWidget(covariant AssetStatusButtons oldWidget) { if (widget.initialValue != oldWidget.initialValue) { final provider = Provider.of(context, listen: false); if (widget.initialValue != null) { @@ -54,7 +54,7 @@ class _CommissioningStatusButtonsState extends State return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - context.translation.assetStatus.heading5(context).paddingOnly(start: 16, end: 16), + context.translation.assetStatus.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, Consumer( builder: (context, snapshot, _) { @@ -69,17 +69,18 @@ class _CommissioningStatusButtonsState extends State 8.width, const _Skelton().expanded, ], - ).paddingOnly(start: 16, end: 16), + ), ) : SizedBox( height: 36.toScreenHeight, - child: ListView.builder( + child: ListView.separated( itemCount: snapshot.items.length + 1, scrollDirection: Axis.horizontal, shrinkWrap: true, - padding: EdgeInsetsDirectional.only(start: 16.toScreenWidth), + padding: EdgeInsetsDirectional.only(start: 0.toScreenWidth), + separatorBuilder: (cxt, index) => 8.width, itemBuilder: (context, index) => Container( - margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth), + margin: EdgeInsets.symmetric(horizontal: 0.toScreenWidth), padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 12.toScreenWidth), alignment: Alignment.center, // foregroundDecoration: _selectedIndex != index @@ -104,8 +105,7 @@ class _CommissioningStatusButtonsState extends State // color: AppColor.filterButtonTextColor(context) - color: _selectedIndex == index ? AppColor.primary10 : AppColor.filterButtonTextColor(context) - ), + color: _selectedIndex == index ? AppColor.primary10 : AppColor.filterButtonTextColor(context)), ).onPress(() { setState(() { _selectedIndex = index; diff --git a/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart b/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart index bc6da6f9..2bb2cd87 100644 --- a/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart +++ b/lib/views/widgets/fullscreen_dialogs/multiple_selection_fullscreen_dialog.dart @@ -54,7 +54,7 @@ class _SelectionBottomSheetState extends State extends State Date: Mon, 11 May 2026 09:31:10 +0300 Subject: [PATCH 9/9] improvements --- lib/modules/tm_module/gas_refill/create_gas_refill_request.dart | 1 + lib/new_views/common_widgets/asset_info_card.dart | 1 + lib/new_views/pages/help_center_page.dart | 1 + lib/new_views/pages/report_bug_page.dart | 1 + 4 files changed, 4 insertions(+) diff --git a/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart b/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart index 6d2e7c90..ccf1e9f6 100644 --- a/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart +++ b/lib/modules/tm_module/gas_refill/create_gas_refill_request.dart @@ -15,6 +15,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; diff --git a/lib/new_views/common_widgets/asset_info_card.dart b/lib/new_views/common_widgets/asset_info_card.dart index c76c7a5b..0540ac45 100644 --- a/lib/new_views/common_widgets/asset_info_card.dart +++ b/lib/new_views/common_widgets/asset_info_card.dart @@ -3,6 +3,7 @@ import 'package:test_sa/extensions/context_extension.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 '../../models/device/asset.dart'; diff --git a/lib/new_views/pages/help_center_page.dart b/lib/new_views/pages/help_center_page.dart index 6b0d00ef..d0847eeb 100644 --- a/lib/new_views/pages/help_center_page.dart +++ b/lib/new_views/pages/help_center_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.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 '../common_widgets/default_app_bar.dart'; diff --git a/lib/new_views/pages/report_bug_page.dart b/lib/new_views/pages/report_bug_page.dart index 55c1a380..84dc988d 100644 --- a/lib/new_views/pages/report_bug_page.dart +++ b/lib/new_views/pages/report_bug_page.dart @@ -6,6 +6,7 @@ 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/models/user.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import '../../controllers/providers/api/user_provider.dart';