import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:household_keeper/features/home/domain/daily_plan_models.dart'; import 'package:household_keeper/features/tasks/domain/relative_date.dart'; /// Warm coral/terracotta color for overdue indicators. const _overdueColor = Color(0xFFE07A5F); /// A task row for the daily plan screen. /// /// Shows task name, a tappable room name tag (navigates to room task list), /// relative due date (coral if overdue), and an optional checkbox. /// /// Per user decisions: /// - NO onTap or onLongPress on the row itself /// - Only the checkbox and room name tag are interactive /// - Checkbox is hidden for tomorrow (read-only preview) tasks class DailyPlanTaskRow extends StatelessWidget { const DailyPlanTaskRow({ super.key, required this.taskWithRoom, required this.showCheckbox, this.onCompleted, }); final TaskWithRoom taskWithRoom; final bool showCheckbox; final VoidCallback? onCompleted; @override Widget build(BuildContext context) { final theme = Theme.of(context); final task = taskWithRoom.task; final now = DateTime.now(); final today = DateTime(now.year, now.month, now.day); final dueDate = DateTime( task.nextDueDate.year, task.nextDueDate.month, task.nextDueDate.day, ); final isOverdue = dueDate.isBefore(today); final relativeDateText = formatRelativeDate(task.nextDueDate, now); return ListTile( leading: showCheckbox ? Checkbox( value: false, onChanged: (_) => onCompleted?.call(), ) : null, title: Text( task.name, style: theme.textTheme.titleMedium, maxLines: 1, overflow: TextOverflow.ellipsis, ), subtitle: Row( children: [ GestureDetector( onTap: () => context.go('/rooms/${taskWithRoom.roomId}'), child: Container( padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), decoration: BoxDecoration( color: theme.colorScheme.secondaryContainer, borderRadius: BorderRadius.circular(4), ), child: Text( taskWithRoom.roomName, style: theme.textTheme.labelSmall?.copyWith( color: theme.colorScheme.onSecondaryContainer, ), ), ), ), const SizedBox(width: 8), Flexible( child: Text( relativeDateText, style: theme.textTheme.bodySmall?.copyWith( color: isOverdue ? _overdueColor : theme.colorScheme.onSurfaceVariant, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), ], ), ); } }