import 'package:flutter/material.dart'; import 'package:flutter_lucide/flutter_lucide.dart'; import 'package:get/get.dart'; import 'package:marco/controller/task_planing/report_task_controller.dart'; import 'package:marco/helpers/theme/app_theme.dart'; import 'package:marco/helpers/utils/mixins/ui_mixin.dart'; import 'package:marco/helpers/utils/my_shadow.dart'; import 'package:marco/helpers/widgets/my_breadcrumb.dart'; import 'package:marco/helpers/widgets/my_breadcrumb_item.dart'; import 'package:marco/helpers/widgets/my_button.dart'; import 'package:marco/helpers/widgets/my_card.dart'; import 'package:marco/helpers/widgets/my_flex.dart'; import 'package:marco/helpers/widgets/my_flex_item.dart'; import 'package:marco/helpers/widgets/my_spacing.dart'; import 'package:marco/helpers/widgets/my_text.dart'; import 'package:marco/helpers/widgets/my_text_style.dart'; import 'package:marco/view/layouts/layout.dart'; import 'package:marco/helpers/widgets/avatar.dart'; import 'package:marco/helpers/widgets/my_team_model_sheet.dart'; class CommentTaskScreen extends StatefulWidget { const CommentTaskScreen({super.key}); @override State createState() => _CommentTaskScreenState(); } class _Member { final String firstName; _Member(this.firstName); } class _CommentTaskScreenState extends State with UIMixin { final ReportTaskController controller = Get.put(ReportTaskController()); @override Widget build(BuildContext context) { final taskData = Get.arguments as Map; print("Task Data: $taskData"); controller.basicValidator.getController('assigned_date')?.text = taskData['assignedOn'] ?? ''; controller.basicValidator.getController('assigned_by')?.text = taskData['assignedBy'] ?? ''; controller.basicValidator.getController('work_area')?.text = taskData['location'] ?? ''; controller.basicValidator.getController('activity')?.text = taskData['activity'] ?? ''; controller.basicValidator.getController('planned_work')?.text = taskData['plannedWork'] ?? ''; controller.basicValidator.getController('completed_work')?.text = taskData['completedWork'] ?? ''; controller.basicValidator.getController('team_members')?.text = (taskData['teamMembers'] as List).join(', '); controller.basicValidator.getController('assigned')?.text = taskData['assigned'] ?? ''; controller.basicValidator.getController('task_id')?.text = taskData['taskId'] ?? ''; return Layout( child: GetBuilder( init: controller, tag: 'comment_task_controller', builder: (controller) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: MySpacing.x(flexSpacing), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ MyText.titleMedium("Comment Task", fontSize: 18, fontWeight: 600), MyBreadcrumb( children: [ MyBreadcrumbItem(name: 'Daily Progress Report'), MyBreadcrumbItem(name: 'Comment Task'), ], ), ], ), ), MySpacing.height(flexSpacing), Padding( padding: MySpacing.x(flexSpacing / 2), child: MyFlex( children: [ MyFlexItem(sizes: "lg-8 md-12", child: detail()), ], ), ), ], ); }, ), ); } Widget detail() { return Form( key: controller.basicValidator.formKey, child: MyCard.bordered( borderRadiusAll: 4, border: Border.all(color: Colors.grey.withOpacity(0.2)), shadow: MyShadow(elevation: 1, position: MyShadowPosition.bottom), paddingAll: 24, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Icon(LucideIcons.server, size: 16), MySpacing.width(12), MyText.titleMedium("Activity Summary", fontWeight: 600), ], ), MySpacing.height(24), // Static fields buildRow( "Assigned By", controller.basicValidator .getController('assigned_by') ?.text .trim()), buildRow( "Work Area", controller.basicValidator .getController('work_area') ?.text .trim()), buildRow( "Activity", controller.basicValidator .getController('activity') ?.text .trim()), buildRow( "Planned Work", controller.basicValidator .getController('planned_work') ?.text .trim()), buildRow( "Completed Work", controller.basicValidator .getController('completed_work') ?.text .trim()), buildTeamMembers(), MyText.labelMedium("Comment"), MySpacing.height(8), TextFormField( validator: controller.basicValidator.getValidation('comment'), controller: controller.basicValidator.getController('comment'), keyboardType: TextInputType.text, decoration: InputDecoration( hintText: "eg: Work done successfully", hintStyle: MyTextStyle.bodySmall(xMuted: true), border: outlineInputBorder, enabledBorder: outlineInputBorder, focusedBorder: focusedInputBorder, contentPadding: MySpacing.all(16), isCollapsed: true, floatingLabelBehavior: FloatingLabelBehavior.never, ), ), MySpacing.height(24), // Buttons Row( mainAxisAlignment: MainAxisAlignment.end, children: [ MyButton.text( onPressed: () => Get.back(), padding: MySpacing.xy(20, 16), splashColor: contentTheme.secondary.withValues(alpha: 0.1), child: MyText.bodySmall('Cancel'), ), MySpacing.width(12), MyButton( onPressed: () async { if (controller.basicValidator.validateForm()) { await controller.reportTask( projectId: controller.basicValidator .getController('task_id') ?.text ?? '', // Replace with actual ID comment: controller.basicValidator .getController('comment') ?.text ?? '', completedTask: int.tryParse(controller.basicValidator .getController('completed_work') ?.text ?? '') ?? 0, checklist: [], reportedDate: DateTime.now(), ); } }, elevation: 0, padding: MySpacing.xy(20, 16), backgroundColor: contentTheme.primary, borderRadiusAll: AppStyle.buttonRadius.medium, child: MyText.bodySmall( 'Comment', color: contentTheme.onPrimary, ), ), ], ), // Loading spinner Obx(() { return controller.isLoading.value ? Center(child: CircularProgressIndicator()) : SizedBox.shrink(); }), ], ), ), ); } Widget buildTeamMembers() { final teamMembersText = controller.basicValidator.getController('team_members')?.text ?? ''; final members = teamMembersText .split(',') .map((e) => e.trim()) .where((e) => e.isNotEmpty) .toList(); return Padding( padding: const EdgeInsets.only(bottom: 16), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ MyText.labelMedium("Team Members:"), MySpacing.width(12), GestureDetector( onTap: () { TeamBottomSheet.show( context: context, teamMembers: members.map((name) => _Member(name)).toList(), ); }, child: SizedBox( height: 32, width: 100, child: Stack( children: [ for (int i = 0; i < members.length.clamp(0, 3); i++) Positioned( left: i * 24.0, child: Tooltip( message: members[i], child: Avatar( firstName: members[i], lastName: '', size: 32, ), ), ), if (members.length > 3) Positioned( left: 2 * 24.0, child: CircleAvatar( radius: 16, backgroundColor: Colors.grey.shade300, child: MyText.bodyMedium( '+${members.length - 3}', style: const TextStyle( fontSize: 12, color: Colors.black87), ), ), ), ], ), ), ), ], ), ); } Widget buildRow(String label, String? value) { print("Label: $label, Value: $value"); return Padding( padding: const EdgeInsets.only(bottom: 16), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ MyText.labelMedium("$label:"), MySpacing.width(12), Expanded( child: MyText.bodyMedium(value?.isNotEmpty == true ? value! : "-"), ), ], ), ); } }