feat(02-02): create room providers, form screen, icon picker, and router routes

- Add Riverpod providers (roomWithStatsList, RoomActions) connecting to RoomsDao
- Create RoomFormScreen with name field, icon picker preview, create/edit modes
- Create IconPickerSheet bottom sheet with curated Material Icons grid
- Add nested GoRouter routes: /rooms/new, /rooms/:roomId, /rooms/:roomId/edit
- Add placeholder TaskListScreen and TaskFormScreen for Plan 03 routes
- Add 11 new German localization keys for room management UI
- Add flutter_reorderable_grid_view dependency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-15 22:00:57 +01:00
parent ead53b4c02
commit 32e61e4bec
11 changed files with 652 additions and 1 deletions

View File

@@ -23,5 +23,21 @@
"placeholders": {
"version": { "type": "String" }
}
}
},
"roomFormCreateTitle": "Raum erstellen",
"roomFormEditTitle": "Raum bearbeiten",
"roomFormNameLabel": "Raumname",
"roomFormNameHint": "z.B. K\u00fcche, Badezimmer...",
"roomFormNameRequired": "Bitte einen Namen eingeben",
"roomFormIconLabel": "Symbol w\u00e4hlen",
"roomDeleteConfirmTitle": "Raum l\u00f6schen?",
"roomDeleteConfirmMessage": "Der Raum und alle zugeh\u00f6rigen Aufgaben werden unwiderruflich gel\u00f6scht.",
"roomDeleteConfirmAction": "L\u00f6schen",
"roomCardDueCount": "{count} f\u00e4llig",
"@roomCardDueCount": {
"placeholders": {
"count": { "type": "int" }
}
},
"cancel": "Abbrechen"
}

View File

@@ -207,6 +207,72 @@ abstract class AppLocalizations {
/// In de, this message translates to:
/// **'Version {version}'**
String aboutVersion(String version);
/// No description provided for @roomFormCreateTitle.
///
/// In de, this message translates to:
/// **'Raum erstellen'**
String get roomFormCreateTitle;
/// No description provided for @roomFormEditTitle.
///
/// In de, this message translates to:
/// **'Raum bearbeiten'**
String get roomFormEditTitle;
/// No description provided for @roomFormNameLabel.
///
/// In de, this message translates to:
/// **'Raumname'**
String get roomFormNameLabel;
/// No description provided for @roomFormNameHint.
///
/// In de, this message translates to:
/// **'z.B. Küche, Badezimmer...'**
String get roomFormNameHint;
/// No description provided for @roomFormNameRequired.
///
/// In de, this message translates to:
/// **'Bitte einen Namen eingeben'**
String get roomFormNameRequired;
/// No description provided for @roomFormIconLabel.
///
/// In de, this message translates to:
/// **'Symbol wählen'**
String get roomFormIconLabel;
/// No description provided for @roomDeleteConfirmTitle.
///
/// In de, this message translates to:
/// **'Raum löschen?'**
String get roomDeleteConfirmTitle;
/// No description provided for @roomDeleteConfirmMessage.
///
/// In de, this message translates to:
/// **'Der Raum und alle zugehörigen Aufgaben werden unwiderruflich gelöscht.'**
String get roomDeleteConfirmMessage;
/// No description provided for @roomDeleteConfirmAction.
///
/// In de, this message translates to:
/// **'Löschen'**
String get roomDeleteConfirmAction;
/// No description provided for @roomCardDueCount.
///
/// In de, this message translates to:
/// **'{count} fällig'**
String roomCardDueCount(int count);
/// No description provided for @cancel.
///
/// In de, this message translates to:
/// **'Abbrechen'**
String get cancel;
}
class _AppLocalizationsDelegate

View File

@@ -67,4 +67,40 @@ class AppLocalizationsDe extends AppLocalizations {
String aboutVersion(String version) {
return 'Version $version';
}
@override
String get roomFormCreateTitle => 'Raum erstellen';
@override
String get roomFormEditTitle => 'Raum bearbeiten';
@override
String get roomFormNameLabel => 'Raumname';
@override
String get roomFormNameHint => 'z.B. Küche, Badezimmer...';
@override
String get roomFormNameRequired => 'Bitte einen Namen eingeben';
@override
String get roomFormIconLabel => 'Symbol wählen';
@override
String get roomDeleteConfirmTitle => 'Raum löschen?';
@override
String get roomDeleteConfirmMessage =>
'Der Raum und alle zugehörigen Aufgaben werden unwiderruflich gelöscht.';
@override
String get roomDeleteConfirmAction => 'Löschen';
@override
String roomCardDueCount(int count) {
return '$count fällig';
}
@override
String get cancel => 'Abbrechen';
}