Wire sidebar Backlog navigation into app shell #9

Closed
opened 2026-07-05 20:01:25 -07:00 by pyr0ball · 1 comment
Collaborator

Context

Part of #6. apps/focus_flow_flutter/lib/widgets/sidebar.dart has a fully working BacklogPane widget, tested in isolation, but every _NavItem.onTap (including "Backlog") is a literal no-op.

Scope

  • Wire the sidebar "Backlog" nav item to switch the main content area to BacklogPane
  • Preserve Today/Backlog state so switching back returns to the prior view

Out of scope

Any other sidebar nav items beyond Today/Backlog (out of MVP boundary per AGENTS.md §8).

Acceptance criteria

Tapping "Backlog" in the sidebar shows the backlog pane; tapping back returns to Today.

#6, apps/focus_flow_flutter/lib/widgets/sidebar.dart

## Context Part of #6. `apps/focus_flow_flutter/lib/widgets/sidebar.dart` has a fully working `BacklogPane` widget, tested in isolation, but every `_NavItem.onTap` (including "Backlog") is a literal no-op. ## Scope - [ ] Wire the sidebar "Backlog" nav item to switch the main content area to `BacklogPane` - [ ] Preserve Today/Backlog state so switching back returns to the prior view ## Out of scope Any other sidebar nav items beyond Today/Backlog (out of MVP boundary per AGENTS.md §8). ## Acceptance criteria Tapping "Backlog" in the sidebar shows the backlog pane; tapping back returns to Today. ## Related #6, `apps/focus_flow_flutter/lib/widgets/sidebar.dart`
pyr0ball added this to the FocusFlow V1 — Feature Complete milestone 2026-07-05 20:01:25 -07:00
pyr0ball added the
type:feature
priority:blocking-v1
area:flutter-ui
labels 2026-07-05 20:01:25 -07:00
Author
Collaborator

Implemented. PersistentSchedulerComposition had no way to create a backlog read controller at all — only the demo composition did — so this needed a small interface addition, not just UI wiring:

  • Added createBacklogController() to SchedulerAppComposition and implemented it in PersistentSchedulerComposition (the demo composition already had a matching method, just needed @override).
  • Added SidebarScreen enum + onSelectToday/onSelectBacklog callbacks to Sidebar; it no longer hardcodes onTap: () {}.
  • _FocusFlowHomeState now owns a backlogController alongside the Today controller, switches the main content area between BacklogPane and the Today timeline, and refreshes both reads after any command (so switching screens never shows stale data).
  • Fixed a latent bug in _NavItem: the active-item key was hardcoded to nav-today-active regardless of which item was active. Now it's derived from the label.

Widget tests pass (flutter test), flutter analyze clean, dart format clean.

Implemented. `PersistentSchedulerComposition` had no way to create a backlog read controller at all — only the demo composition did — so this needed a small interface addition, not just UI wiring: - Added `createBacklogController()` to `SchedulerAppComposition` and implemented it in `PersistentSchedulerComposition` (the demo composition already had a matching method, just needed `@override`). - Added `SidebarScreen` enum + `onSelectToday`/`onSelectBacklog` callbacks to `Sidebar`; it no longer hardcodes `onTap: () {}`. - `_FocusFlowHomeState` now owns a `backlogController` alongside the Today controller, switches the main content area between `BacklogPane` and the Today timeline, and refreshes both reads after any command (so switching screens never shows stale data). - Fixed a latent bug in `_NavItem`: the active-item key was hardcoded to `nav-today-active` regardless of which item was active. Now it's derived from the label. Widget tests pass (`flutter test`), `flutter analyze` clean, `dart format` clean.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: eva/focus-flow#9
No description provided.