Wire Compact/Normal timeline toggle #11

Open
opened 2026-07-05 20:01:26 -07:00 by pyr0ball · 1 comment
Collaborator

Context

Part of #6. top_bar_mode_toggle.dart has an onPressed: () {} no-op. Backend already supports TodayCompactState / CompactTimelineState per MVP-AC-06.

Scope

  • Wire the compact/normal toggle button to switch the Today pane between TimelineRow and CompactPanel rendering

Out of scope

Persisting the toggle choice across app restarts, unless trivial given existing settings persistence.

Acceptance criteria

Toggling the button switches Today between compact and normal rendering live.

#6

## Context Part of #6. `top_bar_mode_toggle.dart` has an `onPressed: () {}` no-op. Backend already supports `TodayCompactState` / `CompactTimelineState` per MVP-AC-06. ## Scope - [ ] Wire the compact/normal toggle button to switch the Today pane between `TimelineRow` and `CompactPanel` rendering ## Out of scope Persisting the toggle choice across app restarts, unless trivial given existing settings persistence. ## Acceptance criteria Toggling the button switches Today between compact and normal rendering live. ## Related #6
pyr0ball added this to the FocusFlow V1 — Feature Complete milestone 2026-07-05 20:01:26 -07:00
pyr0ball added the
type:feature
priority:blocking-v1
area:flutter-ui
labels 2026-07-05 20:01:26 -07:00
Author
Collaborator

Rescoping based on actual code inspection — this is bigger than "wire the existing toggle."

What's real: _ModeToggle (lib/widgets/top_bar/top_bar_mode_toggle.dart) has a genuine onPressed: () {} no-op on the "Normal" segment, and "Compact" is styled as permanently active with no tap handler at all.

What's NOT real, despite looking like it exists: There IS a CompactPanel/TodayPane widget pair (lib/widgets/schedule_components.dart, lib/widgets/today_pane.dart) that renders a TodayCompactState-shaped compact view — but TodayPane is dead code. It is not referenced anywhere in lib/ or test/ outside its own file. It appears to be a leftover from the "UI Plan 1 — Compact Today Timeline Mockup" era, superseded by the current live pipeline (FocusFlowHome_TodayScreenScaffoldTimelineView).

The current live TodayScreenData/TodayScreenController pipeline has no compact-vs-normal concept at all. TimelineCardModel's isCompact (in card_metrics.dart) is a per-card automatic density decision based on available pixel height — not a user-toggleable mode. OwnerSettings.compactModeEnabled exists as a persisted backend field but nothing in the live Flutter pipeline reads it.

So closing this issue requires deciding what "Normal" vs "Compact" actually means for the current TimelineView rendering (not the orphaned mockup), then:

  1. Deciding whether to resurrect/adapt CompactPanel/TodayPane or design a new compact rendering path against live TodayScreenData.
  2. Threading a mode flag through TodayScreenController/TodayScreenData (or a separate lightweight ValueNotifier in _FocusFlowHomeState).
  3. Wiring _ModeToggle to that state and branching _buildTodayContent between normal and compact rendering.

Keeping priority:blocking-v1 since MVP-AC-06 ("Use compact Today mode manually") is a named V1 acceptance criterion in V1_REQUIREMENTS_TRACEABILITY_MATRIX.md, not polish — but flagging that this needs a short design decision before implementation, not just wiring.

Rescoping based on actual code inspection — this is bigger than "wire the existing toggle." **What's real:** `_ModeToggle` (`lib/widgets/top_bar/top_bar_mode_toggle.dart`) has a genuine `onPressed: () {}` no-op on the "Normal" segment, and "Compact" is styled as permanently active with no tap handler at all. **What's NOT real, despite looking like it exists:** There IS a `CompactPanel`/`TodayPane` widget pair (`lib/widgets/schedule_components.dart`, `lib/widgets/today_pane.dart`) that renders a `TodayCompactState`-shaped compact view — but `TodayPane` is dead code. It is not referenced anywhere in `lib/` or `test/` outside its own file. It appears to be a leftover from the "UI Plan 1 — Compact Today Timeline Mockup" era, superseded by the current live pipeline (`FocusFlowHome` → `_TodayScreenScaffold` → `TimelineView`). The **current live** `TodayScreenData`/`TodayScreenController` pipeline has **no compact-vs-normal concept at all**. `TimelineCardModel`'s `isCompact` (in `card_metrics.dart`) is a per-card automatic density decision based on available pixel height — not a user-toggleable mode. `OwnerSettings.compactModeEnabled` exists as a persisted backend field but nothing in the live Flutter pipeline reads it. So closing this issue requires deciding what "Normal" vs "Compact" actually means for the *current* `TimelineView` rendering (not the orphaned mockup), then: 1. Deciding whether to resurrect/adapt `CompactPanel`/`TodayPane` or design a new compact rendering path against live `TodayScreenData`. 2. Threading a mode flag through `TodayScreenController`/`TodayScreenData` (or a separate lightweight `ValueNotifier` in `_FocusFlowHomeState`). 3. Wiring `_ModeToggle` to that state and branching `_buildTodayContent` between normal and compact rendering. Keeping `priority:blocking-v1` since MVP-AC-06 ("Use compact Today mode manually") is a named V1 acceptance criterion in `V1_REQUIREMENTS_TRACEABILITY_MATRIX.md`, not polish — but flagging that this needs a short design decision before implementation, not just wiring.
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#11
No description provided.