Files
Jean-Luc Makiola edce11dd78 chore: complete v1.1 milestone
Archive v1.1 Calendar & Polish milestone artifacts (roadmap,
requirements, phase directories) to milestones/. Evolve PROJECT.md
with validated requirements and new key decisions. Update
RETROSPECTIVE.md with v1.1 section and cross-milestone trends.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 23:32:04 +01:00

5.3 KiB

phase: 07-task-sorting plan: 02 subsystem: ui tags: [flutter, riverpod, material3, popup-menu, sort-ui, localization] # Dependency graph requires: - phase: 07-task-sorting plan: 01 provides: sortPreferenceProvider, TaskSortOption enum, German sort l10n strings provides: - SortDropdown ConsumerWidget (PopupMenuButton with check marks) - HomeScreen with AppBar (title: Übersicht, actions: SortDropdown) - TaskListScreen AppBar with SortDropdown before edit/delete buttons affects: [home_screen_test.dart, app_shell_test.dart, any screen showing HomeScreen] # Tech tracking tech-stack: added: [] patterns: - "PopupMenuButton with Opacity check mark — avoids layout shift vs conditional Icon" - "Nested Scaffold inside AppShell tab body — standard pattern for per-tab AppBars in StatefulShellRoute" key-files: created: - lib/features/tasks/presentation/sort_dropdown.dart modified: - lib/features/home/presentation/home_screen.dart - lib/features/tasks/presentation/task_list_screen.dart - test/features/home/presentation/home_screen_test.dart - test/shell/app_shell_test.dart key-decisions: - "Used PopupMenuButton instead of DropdownButton for AppBar — menu overlay vs inline expansion, consistent with Material 3 AppBar action patterns" - "Opacity(opacity: isSelected ? 1 : 0) for check mark — preserves item width alignment vs conditional show/hide" - "HomeScreen Scaffold is nested inside AppShell Scaffold — standard StatefulShellRoute pattern for per-tab AppBars" # Metrics duration: 4min completed: 2026-03-16

Phase 07 Plan 02: Sort Dropdown UI Summary

SortDropdown ConsumerWidget using PopupMenuButton wired into HomeScreen AppBar (title: Übersicht) and TaskListScreen AppBar before edit/delete actions

Performance

  • Duration: 4 min
  • Started: 2026-03-16T21:35:56Z
  • Completed: 2026-03-16T21:39:24Z
  • Tasks: 2
  • Files modified: 5 (1 created, 4 modified)

Accomplishments

  • SortDropdown ConsumerWidget: PopupMenuButton with sort icon, current label, and check mark on active option
  • HomeScreen wrapped in Scaffold with AppBar titled "Übersicht" and SortDropdown in trailing actions
  • TaskListScreen AppBar has SortDropdown before the existing edit/delete IconButtons
  • 2 new tests in HomeScreen test suite: verifies PopupMenuButton and AppBar title presence
  • Auto-fixed app_shell_test regression caused by "Übersicht" now appearing twice (AppBar + bottom nav)

Task Commits

Each task was committed atomically:

  1. Task 1: SortDropdown widget and HomeScreen/TaskListScreen integration - e5eccb7 (feat)
  2. Task 2: Sort dropdown tests and AppShell test fix - a3e4d02 (feat)

Files Created/Modified

  • lib/features/tasks/presentation/sort_dropdown.dart - Reusable SortDropdown ConsumerWidget with PopupMenuButton
  • lib/features/home/presentation/home_screen.dart - Added Scaffold with AppBar (Übersicht title + SortDropdown)
  • lib/features/tasks/presentation/task_list_screen.dart - Added SortDropdown before edit/delete in AppBar actions
  • test/features/home/presentation/home_screen_test.dart - Added sortPreferenceProvider override + 2 new sort dropdown tests
  • test/shell/app_shell_test.dart - Fixed findsOneWidget -> findsWidgets for 'Übersicht' (now in AppBar + bottom nav)

Decisions Made

  • Used PopupMenuButton instead of DropdownButton for AppBar actions — menu overlay is cleaner in AppBar context (Material 3)
  • Opacity trick for check mark: Opacity(opacity: isSelected ? 1 : 0) preserves item width so labels align regardless of selection
  • HomeScreen uses nested Scaffold for AppBar — standard pattern in StatefulShellRoute.indexedStack; AppShell provides bottom nav, HomeScreen provides AppBar

Deviations from Plan

Auto-fixed Issues

1. [Rule 1 - Bug] Fixed AppShell test regression from 'Übersicht' duplicate

  • Found during: Task 2 test run
  • Issue: app_shell_test.dart expected findsOneWidget for 'Übersicht'. Adding the HomeScreen AppBar title caused the string to appear twice (AppBar + bottom nav label).
  • Fix: Changed findsOneWidget to findsWidgets in app_shell_test.dart line 67. Applied same fix to new home_screen_test.dart AppBar title test.
  • Files modified: test/shell/app_shell_test.dart, test/features/home/presentation/home_screen_test.dart
  • Commit: a3e4d02

Issues Encountered

None beyond the auto-fixed regression.

User Setup Required

None - no external service configuration required.

Next Phase Readiness

  • Phase 07 (task sorting) is now complete: data layer (07-01) + UI layer (07-02)
  • Sort dropdown is live in both HomeScreen and TaskListScreen AppBars
  • Selecting a sort option reactively reorders task lists via sortPreferenceProvider
  • Preference persists across app restarts via SharedPreferences

Phase: 07-task-sorting Completed: 2026-03-16

Self-Check: PASSED

  • FOUND: lib/features/tasks/presentation/sort_dropdown.dart
  • FOUND: lib/features/home/presentation/home_screen.dart (modified)
  • FOUND: lib/features/tasks/presentation/task_list_screen.dart (modified)
  • FOUND: test/features/home/presentation/home_screen_test.dart (modified)
  • FOUND: test/shell/app_shell_test.dart (modified)
  • Commits e5eccb7, a3e4d02 verified in git log
  • All 115 tests pass, dart analyze clean