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

@@ -273,6 +273,126 @@ abstract class AppLocalizations {
/// In de, this message translates to:
/// **'Abbrechen'**
String get cancel;
/// No description provided for @taskFormCreateTitle.
///
/// In de, this message translates to:
/// **'Aufgabe erstellen'**
String get taskFormCreateTitle;
/// No description provided for @taskFormEditTitle.
///
/// In de, this message translates to:
/// **'Aufgabe bearbeiten'**
String get taskFormEditTitle;
/// No description provided for @taskFormNameLabel.
///
/// In de, this message translates to:
/// **'Aufgabenname'**
String get taskFormNameLabel;
/// No description provided for @taskFormNameHint.
///
/// In de, this message translates to:
/// **'z.B. Staubsaugen, Fenster putzen...'**
String get taskFormNameHint;
/// No description provided for @taskFormNameRequired.
///
/// In de, this message translates to:
/// **'Bitte einen Namen eingeben'**
String get taskFormNameRequired;
/// No description provided for @taskFormFrequencyLabel.
///
/// In de, this message translates to:
/// **'Wiederholung'**
String get taskFormFrequencyLabel;
/// No description provided for @taskFormFrequencyCustom.
///
/// In de, this message translates to:
/// **'Benutzerdefiniert'**
String get taskFormFrequencyCustom;
/// No description provided for @taskFormFrequencyEvery.
///
/// In de, this message translates to:
/// **'Alle'**
String get taskFormFrequencyEvery;
/// No description provided for @taskFormFrequencyUnitDays.
///
/// In de, this message translates to:
/// **'Tage'**
String get taskFormFrequencyUnitDays;
/// No description provided for @taskFormFrequencyUnitWeeks.
///
/// In de, this message translates to:
/// **'Wochen'**
String get taskFormFrequencyUnitWeeks;
/// No description provided for @taskFormFrequencyUnitMonths.
///
/// In de, this message translates to:
/// **'Monate'**
String get taskFormFrequencyUnitMonths;
/// No description provided for @taskFormEffortLabel.
///
/// In de, this message translates to:
/// **'Aufwand'**
String get taskFormEffortLabel;
/// No description provided for @taskFormDescriptionLabel.
///
/// In de, this message translates to:
/// **'Beschreibung (optional)'**
String get taskFormDescriptionLabel;
/// No description provided for @taskFormDueDateLabel.
///
/// In de, this message translates to:
/// **'Erstes Fälligkeitsdatum'**
String get taskFormDueDateLabel;
/// No description provided for @taskDeleteConfirmTitle.
///
/// In de, this message translates to:
/// **'Aufgabe löschen?'**
String get taskDeleteConfirmTitle;
/// No description provided for @taskDeleteConfirmMessage.
///
/// In de, this message translates to:
/// **'Die Aufgabe wird unwiderruflich gelöscht.'**
String get taskDeleteConfirmMessage;
/// No description provided for @taskDeleteConfirmAction.
///
/// In de, this message translates to:
/// **'Löschen'**
String get taskDeleteConfirmAction;
/// No description provided for @taskEmptyTitle.
///
/// In de, this message translates to:
/// **'Noch keine Aufgaben'**
String get taskEmptyTitle;
/// No description provided for @taskEmptyMessage.
///
/// In de, this message translates to:
/// **'Erstelle die erste Aufgabe für diesen Raum.'**
String get taskEmptyMessage;
/// No description provided for @taskEmptyAction.
///
/// In de, this message translates to:
/// **'Aufgabe erstellen'**
String get taskEmptyAction;
}
class _AppLocalizationsDelegate