Skip to content

fix(tv-motion): route Canvas Home stage's rail-switch through the motion profile - #286

Merged
ghbarker merged 1 commit into
feature/post-refactorfrom
fix/canvas-stage-rail-switch-motion-profile
Sep 8, 2026
Merged

ghbarker merged 1 commit into
feature/post-refactorfrom
fix/canvas-stage-rail-switch-motion-profile

Conversation

@ghbarker

@ghbarker ghbarker commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • Canvas is the shipped default TV Home layout. It has no vertical scrolling by design — DPAD up/down swaps the bottom shelf to a different rail via an AnimatedSwitcher crossfade, a completely separate mechanism from the row-widget scroll-follow sites fix(tv-motion): route the pre-#276 scroll-follow sites through the TV motion profile #283/fix(tv-motion): route TvFocusScrollWrapper through the motion profile #285 already fixed.
  • That crossfade hardcoded a flat 200ms with no profile branch, and being a plain fade with no spatial motion it read as an instant cut regardless of duration — so on the default layout, Smooth/Snappy visibly changed nothing for the interaction most likely to be described as "scrolling through catalogues".
  • Snappy keeps the shipped 200ms; smooth now resolves through AppMotion.tvScroll (260ms). Added a slide to the crossfade so the switch reads as motion rather than a cut.

Test plan

  • New regression test (canvas_stage_motion_profile_test.dart), confirmed to fail against the pre-fix flat 200ms and pass after
  • Existing canvas_stage_origin_test.dart / canvas_tab_window_origin_test.dart / tv_home_stage_layouts_pin_test.dart all still pass
  • flutter analyze clean on changed files

…ion profile

Canvas is the shipped default TV Home layout (pinned by
tv_home_stage_layouts_pin_test.dart), and it doesn't scroll at all —
DPAD up/down swaps the bottom shelf to a different rail via an
AnimatedSwitcher crossfade, a completely separate mechanism from the
row-widget scroll-follow sites #283/#285 already fixed. That
crossfade hardcoded a flat 200ms with no profile branch, and being a
plain fade with no spatial motion it read as an instant cut regardless
of duration — so on the default layout, Smooth/Snappy visibly changed
nothing for the one interaction most likely to be described as
"scrolling through catalogues".

Snappy keeps the shipped 200ms; smooth now resolves through
AppMotion.tvScroll (260ms). Added a slide to the crossfade so the
switch reads as motion rather than a cut. Added a regression test
verified to fail against the pre-fix flat 200ms and pass after.
@ghbarker
ghbarker merged commit 4957216 into feature/post-refactor Sep 8, 2026
3 checks passed
@ghbarker
ghbarker deleted the fix/canvas-stage-rail-switch-motion-profile branch September 8, 2026 06:28
ghbarker added a commit that referenced this pull request Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant