- calendarDayProvider watches sortPreferenceProvider and sorts dayTasks
- overdueTasks intentionally unsorted (pinned at top per design decision)
- tasksInRoomProvider watches sortPreferenceProvider and sorts via stream.map
- _sortTasks helper (TaskWithRoom) and _sortTasksRaw helper (Task) both support:
- alphabetical: case-insensitive A-Z by name
- interval: by intervalType.index ascending, intervalDays as tiebreaker
- effort: by effortLevel.index ascending (low→medium→high)
- All 113 tests pass, analyze clean
- TaskListScreen with room name in AppBar, edit/delete room actions
- AsyncValue.when for loading/error/data states with empty state
- TaskRow with leading checkbox, name, German relative due date, frequency label
- Overdue dates highlighted in warm coral (0xFFE07A5F)
- Checkbox marks done immediately (optimistic UI, no undo)
- Row tap navigates to edit form, long-press shows delete confirmation
- FAB for creating new tasks
- ListView.builder for task list sorted by due date
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TaskActions AsyncNotifier for create, update, delete, complete task mutations
- tasksInRoomProvider manual StreamProvider.family wrapping TasksDao.watchTasksInRoom
- TaskFormScreen with name, frequency (10 presets + custom), effort (3-way segmented),
description, and initial due date picker (German DD.MM.YYYY format)
- Custom frequency: number + unit picker (Tage/Wochen/Monate)
- Calendar-anchored intervals auto-set anchorDay from due date
- Edit mode loads existing task and pre-fills all fields
- 19 new German localization keys for task form, delete, and empty state
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>