11 Commits

Author SHA1 Message Date
8a0b69b688 feat(09-01): rework frequency picker with shortcut chips and freeform picker
- Replace 10-chip grid + hidden Custom mode with 4 shortcut chips (Täglich, Wöchentlich, Alle 2 Wochen, Monatlich)
- Always-visible freeform 'Alle [N] [Tage/Wochen/Monate]' picker row below chips
- Bidirectional sync: tapping chip populates picker; editing picker recalculates chip highlight
- _resolveFrequency() now reads exclusively from picker (single source of truth)
- Edit mode correctly loads all 8 IntervalType values including quarterly and yearly
- Add l10n keys frequencyShortcutDaily/Weekly/Biweekly/Monthly to app_de.arb
2026-03-18 22:45:38 +01:00
13c7d623ba feat(07-01): create TaskSortOption enum, SortPreferenceNotifier, and localization strings
- TaskSortOption enum with alphabetical, interval, effort values
- SortPreferenceNotifier persists sort preference to SharedPreferences
- Follows ThemeNotifier pattern: sync default (alphabetical), async load
- Generated sort_preference_notifier.g.dart via build_runner
- Added sortAlphabetical/sortInterval/sortEffort/sortLabel to app_de.arb
- Regenerated app_localizations.dart and app_localizations_de.dart
2026-03-16 22:32:06 +01:00
ceae7d7d61 feat(06-01): add watchCompletionsForTask DAO method and history localization strings
- Add watchCompletionsForTask(taskId) to TasksDao: Stream<List<TaskCompletion>> sorted newest first
- Regenerate tasks_dao.g.dart with build_runner
- Add taskHistoryTitle, taskHistoryEmpty, taskHistoryCount to app_de.arb
- Regenerate app_localizations.dart and app_localizations_de.dart
- All 5 new DAO tests pass, zero analyze issues
2026-03-16 21:55:44 +01:00
68ba7c65ce feat(05-01): add CalendarDayState model, Riverpod providers, and l10n strings
- CalendarDayState: selectedDate, dayTasks, overdueTasks fields with isEmpty helper
- selectedDateProvider: NotifierProvider with SelectedDateNotifier, defaults to today
- calendarDayProvider: StreamProvider.autoDispose, overdue only when viewing today
- Add calendarTodayButton l10n string ("Heute") to ARB and generated dart files
2026-03-16 21:24:07 +01:00
0103ddebbb feat(04-02): wire notification settings UI, permission flow, scheduling, and tap navigation
- Convert SettingsScreen from ConsumerWidget to ConsumerStatefulWidget
- Add Benachrichtigungen section between Darstellung and Uber sections
- SwitchListTile with permission request on toggle ON (Android 13+)
- Toggle reverts to OFF on permission denial with SnackBar hint
- AnimatedSize progressive disclosure for time picker row when enabled
- _scheduleNotification() queries DailyPlanDao for task/overdue counts
- Skip notification scheduling when task count is 0
- Notification body includes overdue split when overdue > 0
- _onPickTime() shows Material 3 showTimePicker dialog then reschedules
- Wire router.go('/') in NotificationService._onTap for tap navigation
- Regenerate AppLocalizations with 7 new notification strings from Plan 01 ARB
2026-03-16 15:06:00 +01:00
1c09a43995 feat(03-01): add daily plan provider with date categorization and localization keys
- dailyPlanProvider: manual StreamProvider.autoDispose with overdue/today/tomorrow partitioning
- Stable progress denominator: remaining overdue + remaining today + completedTodayCount
- 10 new German localization keys for daily plan sections, progress, empty states
- dart analyze clean, full test suite (66/66) passes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:30:58 +01:00
76cd98300d fix: use ValueKey<String> for reorderable grid and add status bar padding
flutter_reorderable_grid_view requires String keys, not int. Also
adds safe area top padding so the room grid doesn't overlap the
system status bar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:59:24 +01:00
903567e735 feat(02-04): create template picker bottom sheet with German localization
- Add TemplatePickerSheet StatefulWidget with checklist UI for task templates
- Add showTemplatePickerSheet helper for modal display with DraggableScrollableSheet
- Add 4 German localization keys: templatePickerTitle, Skip, Add, Selected count
- All templates unchecked by default, confirm button only enabled with selection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:17:21 +01:00
652ff0123f 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>
2026-03-15 22:07:53 +01:00
32e61e4bec 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>
2026-03-15 22:00:57 +01:00
51738f78bc feat(01-01): add core infrastructure, localization, and Wave 0 tests
- AppDatabase with schemaVersion 1, in-memory executor for testing
- Database provider with @Riverpod(keepAlive: true)
- AppTheme with sage green seed ColorScheme and warm surface overrides
- ThemeNotifier with SharedPreferences persistence, defaults to system
- Full German ARB localization (15 keys) with proper umlauts
- Minimal main.dart with ProviderScope placeholder
- Drift schema v1 captured via make-migrations
- All .g.dart files generated via build_runner
- Wave 0 tests: database (3), color scheme (6), theme (3), localization (2) -- 14 total, all passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 19:59:44 +01:00