Files
2026-03-18 22:47:04 +01:00

5.0 KiB

phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, requirements-completed, duration, completed
phase plan subsystem tags requires provides affects tech-stack key-files key-decisions patterns-established requirements-completed duration completed
09-task-creation-ux 01 ui
flutter
dart
l10n
frequency-picker
choice-chip
segmented-button
Reworked frequency picker with 4 shortcut chips (Täglich, Wöchentlich, Alle 2 Wochen, Monatlich)
Always-visible freeform "Alle [N] [unit]" picker replacing hidden Custom mode
Bidirectional chip/picker sync via _ShortcutFrequency enum
Unified _resolveFrequency() reading exclusively from picker (single source of truth)
Edit mode loading for all 8 IntervalType values including quarterly and yearly
added patterns
Shortcut chip + freeform picker: ChoiceChip row above always-visible SegmentedButton picker
Bidirectional sync: chip tapped populates picker; picker edited recalculates chip highlight via fromPickerValues()
Single source of truth: _resolveFrequency() always reads from picker, never from a preset reference
created modified
lib/features/tasks/presentation/task_form_screen.dart
lib/l10n/app_de.arb
lib/l10n/app_localizations.dart
lib/l10n/app_localizations_de.dart
Picker is single source of truth: _resolveFrequency() reads from _customIntervalController + _customUnit always
_ShortcutFrequency enum with toPickerValues() and fromPickerValues() handles bidirectional sync without manual mapping
Named IntervalTypes (daily/weekly/biweekly/monthly) used for canonical values; only everyNDays for 3+ weeks
Quarterly (3 months) and yearly (12 months) displayed correctly in picker with no chip highlighted
Shortcut chip pattern: enum with toPickerValues() / fromPickerValues() for bidirectional picker sync
TCX-01
TCX-02
TCX-03
TCX-04
2min 2026-03-18

Phase 9 Plan 01: Task Creation UX — Frequency Picker Rework Summary

4 shortcut chips (Täglich/Wöchentlich/Alle 2 Wochen/Monatlich) + always-visible freeform picker replacing the 10-chip grid with hidden Custom mode

Performance

  • Duration: 2 min
  • Started: 2026-03-18T21:43:24Z
  • Completed: 2026-03-18T21:45:30Z
  • Tasks: 1 (+ 1 auto-approved checkpoint)
  • Files modified: 4

Accomplishments

  • Replaced 10-chip preset grid and hidden "Benutzerdefiniert" mode with 4 shortcut chips + always-visible freeform picker
  • Implemented bidirectional sync: tapping a chip populates the picker; editing the picker recalculates chip highlight
  • Simplified _resolveFrequency() to read exclusively from the picker (single source of truth), using named IntervalTypes for canonical values
  • Edit mode correctly loads all 8 IntervalType values (daily, everyNDays, weekly, biweekly, monthly, everyNMonths, quarterly, yearly) into the picker and highlights the matching shortcut chip where applicable

Task Commits

Each task was committed atomically:

  1. Task 1: Rework frequency picker — shortcut chips + freeform picker - 8a0b69b (feat)
  2. Task 2: Verify frequency picker UX - auto-approved (checkpoint:human-verify, auto_advance=true)

Plan metadata: (docs commit follows)

Files Created/Modified

  • lib/features/tasks/presentation/task_form_screen.dart - Reworked frequency picker: removed _selectedPreset and _isCustomFrequency fields; added _ShortcutFrequency enum and _activeShortcut state; replaced _buildFrequencySelector() with shortcut chips + always-visible picker; renamed _buildCustomFrequencyInput to _buildFrequencyPickerRow with bidirectional sync; simplified _resolveFrequency() to picker-only
  • lib/l10n/app_de.arb - Added frequencyShortcutDaily/Weekly/Biweekly/Monthly keys
  • lib/l10n/app_localizations.dart - Regenerated to include new shortcut string getters
  • lib/l10n/app_localizations_de.dart - Regenerated with German translations (Täglich, Wöchentlich, Alle 2 Wochen, Monatlich)

Decisions Made

  • Picker is single source of truth: _resolveFrequency() reads from _customIntervalController + _customUnit always, regardless of which chip is highlighted
  • _ShortcutFrequency enum with toPickerValues() and static fromPickerValues() cleanly handles bidirectional sync without manual if-chain mapping in each callback
  • Named IntervalTypes (daily/weekly/biweekly/monthly) used for canonical values (e.g., weekly has days=1, biweekly has days=14) matching existing DB records; only everyNDays used for 3+ weeks
  • Quarterly (3 months) and yearly (12 months) round-trip correctly: loaded as "3 Monate" / "12 Monate" in picker with no chip highlighted

Deviations from Plan

None - plan executed exactly as written.

Issues Encountered

None.

User Setup Required

None - no external service configuration required.

Next Phase Readiness

  • Frequency picker rework complete; TaskFormScreen is ready for further UX improvements
  • All 144 existing tests pass, dart analyze is clean
  • No changes to frequency.dart, no DB migration, no new screens

Phase: 09-task-creation-ux Completed: 2026-03-18