From 515da156b2b932f29b9aaed22ad2265f34b75ace Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 28 Apr 2026 09:14:06 +0300 Subject: [PATCH] improvements. --- .../widgets/cleaner_checklist_widget.dart | 64 ++++++++++++++++--- .../recurrent_work_order_view.dart | 17 +++-- 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart b/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart index ad3cb08b..9ec79ab6 100644 --- a/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart +++ b/lib/modules/cleaner_module/widgets/cleaner_checklist_widget.dart @@ -50,7 +50,7 @@ class _CleanerChecklistWidgetState extends State { padding: EdgeInsets.zero, physics: const NeverScrollableScrollPhysics(), itemBuilder: (cxt, index) => _buildChecklistItem(context, widget.checklistItems[index]), - separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), + separatorBuilder: (cxt, index) => const Divider(height: 1, color: AppColor.neutral30, thickness: 1).paddingOnly(top: 16, bottom: 16), itemCount: widget.checklistItems.length) .toShadowContainer(context, padding: 16), 16.height, @@ -66,13 +66,63 @@ class _CleanerChecklistWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - ListTileTheme( + Row( + children: [ + AbsorbPointer( + absorbing: true, + child: Transform.scale( + scale: 1.2, + child: Checkbox( + value: item.isChecked, + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + side: BorderSide(color: Colors.black.withValues(alpha: .05)), + visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0), + activeColor: AppColor.primary10, + onChanged: (bool? value) {}, + ), + ), + ), + 10.width, + RichText( + text: TextSpan( + children: [ + TextSpan( + text: item.title, + style: AppTextStyles.bodyText.copyWith( + color: context.isDark ? AppColor.neutral10 : AppColor.neutral120, + fontWeight: FontWeight.w500, + ), + ), + if (item.isMandatory) + TextSpan( + text: ' *', + style: AppTextStyles.bodyText.copyWith( + color: Colors.red, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ).expanded, + ], + ).onPress(() { + setState(() { + item.isChecked = !item.isChecked; + if (!item.isChecked) { + item.commentController.clear(); + } + }); + widget.onChecklistChanged?.call(widget.checklistItems); + }), + /* ListTileTheme( horizontalTitleGap: 0, + contentPadding: EdgeInsets.zero, + minVerticalPadding: 0, child: Container( - alignment: Alignment.center, - height: 50.toScreenHeight, + color: Colors.amberAccent, child: CheckboxListTile( value: item.isChecked, + minVerticalPadding: 0, controlAffinity: ListTileControlAffinity.leading, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, contentPadding: EdgeInsets.zero, @@ -108,14 +158,13 @@ class _CleanerChecklistWidgetState extends State { item.commentController.clear(); } }); - // Notify parent of changes widget.onChecklistChanged?.call(widget.checklistItems); }, ), ), - ), + ),*/ if (item.isChecked) ...[ - // 16.height, + 12.height, AppTextFormField( controller: item.commentController, labelText: context.translation.comment, @@ -128,7 +177,6 @@ class _CleanerChecklistWidgetState extends State { textInputType: TextInputType.multiline, onChange: (value) { item.comment = value; - // Notify parent of changes widget.onChecklistChanged?.call(widget.checklistItems); }, ), diff --git a/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart b/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart index 8f99d03c..3b1a0a30 100644 --- a/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart +++ b/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart @@ -186,14 +186,19 @@ void _updateTask({required BuildContext context, required int status}) async { ), ); }); - log('payload for update is ${allRequestsProvider.recurrentWoData?.toJson()}'); + + final uniqueTimersMap = {}; + allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers?.forEach((timer) { + if (timer.startTime != null && timer.endTime != null) { + final key = '${timer.id}_${timer.startTime}_${timer.endTime}'; + uniqueTimersMap[key] = timer; + } + }); + + allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers = uniqueTimersMap.values.toList(); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - await allRequestsProvider - .updateRecurrentWo( - status: status, - ) - .then((success) { + await allRequestsProvider.updateRecurrentWo(status: status).then((success) { Navigator.pop(context); // Close loading dialog if (success) { if (status == 1) {