feat(02-03): create task providers, form screen with frequency and effort selectors

- 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>
This commit is contained in:
2026-03-15 22:07:53 +01:00
parent 519a56bef7
commit 652ff0123f
7 changed files with 756 additions and 8 deletions

View File

@@ -103,4 +103,65 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get cancel => 'Abbrechen';
@override
String get taskFormCreateTitle => 'Aufgabe erstellen';
@override
String get taskFormEditTitle => 'Aufgabe bearbeiten';
@override
String get taskFormNameLabel => 'Aufgabenname';
@override
String get taskFormNameHint => 'z.B. Staubsaugen, Fenster putzen...';
@override
String get taskFormNameRequired => 'Bitte einen Namen eingeben';
@override
String get taskFormFrequencyLabel => 'Wiederholung';
@override
String get taskFormFrequencyCustom => 'Benutzerdefiniert';
@override
String get taskFormFrequencyEvery => 'Alle';
@override
String get taskFormFrequencyUnitDays => 'Tage';
@override
String get taskFormFrequencyUnitWeeks => 'Wochen';
@override
String get taskFormFrequencyUnitMonths => 'Monate';
@override
String get taskFormEffortLabel => 'Aufwand';
@override
String get taskFormDescriptionLabel => 'Beschreibung (optional)';
@override
String get taskFormDueDateLabel => 'Erstes Fälligkeitsdatum';
@override
String get taskDeleteConfirmTitle => 'Aufgabe löschen?';
@override
String get taskDeleteConfirmMessage =>
'Die Aufgabe wird unwiderruflich gelöscht.';
@override
String get taskDeleteConfirmAction => 'Löschen';
@override
String get taskEmptyTitle => 'Noch keine Aufgaben';
@override
String get taskEmptyMessage => 'Erstelle die erste Aufgabe für diesen Raum.';
@override
String get taskEmptyAction => 'Aufgabe erstellen';
}