From 822048246598e93b1e4a5f5cb558c6b82faa7558 Mon Sep 17 00:00:00 2001 From: Marc Rejohn Castillano Date: Mon, 28 Sep 2026 22:48:12 +0800 Subject: [PATCH] fix(day-sheet): composite key prevents duplicate-key crash for helper+assignee rows buildDayRows can emit both an 'assignee' row and a 'helper' row for the same taskId when a programmer previously held a task (accumulated clock time) and later helped on it after reassignment. ValueKey(row.taskId) collided in that case, crashing Flutter's widget tree with a red screen. Fixed by keying on taskId:kind, making each row unique. Caught during targeted QA on the new loading-state / dialog flows. Co-Authored-By: claude-flow --- .../programmer_tasks/day_sheets/day_sheet_rows_table.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/programmer_tasks/day_sheets/day_sheet_rows_table.dart b/lib/screens/programmer_tasks/day_sheets/day_sheet_rows_table.dart index f2061945..e3c7a3b3 100644 --- a/lib/screens/programmer_tasks/day_sheets/day_sheet_rows_table.dart +++ b/lib/screens/programmer_tasks/day_sheets/day_sheet_rows_table.dart @@ -53,7 +53,7 @@ class DaySheetRowsTable extends StatelessWidget { children: [ for (final row in rows) _RowTile( - key: ValueKey(row.taskId), + key: ValueKey('${row.taskId}:${row.kind}'), row: row, isFlagged: flaggedTaskIds.contains(row.taskId), isSelected: selectedTaskIds?.contains(row.taskId) ?? false,