Skip to content

fix(mobile): hide clipped section rows from semantics while opening - #9416

Merged
michaelfransen merged 1 commit into
mfransen/lazy-channel-rowsfrom
fix-9401-sliver-semantics-clip
Nov 12, 2026
Merged

michaelfransen merged 1 commit into
mfransen/lazy-channel-rowsfrom
fix-9401-sliver-semantics-clip

Conversation

@brow

@brow brow commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

Fix for a regression found in review of #9401 lazy section rows. This PR targets that PR's branch.

While a channel section opens, CollapsibleSliverBody clips painting to the revealed extent, but its render object didn't report that clip to the semantics compiler (RenderProxySliver inherits describeApproximatePaintClip => null). Every mounted row under the clip, including rows drawn beneath the following section, stayed a reachable screen-reader node until the 220 ms animation finished. The old ClipRect-based body reported its clip, so those rows were excluded.

The fix reports the same rect that paint clips to while the section is animating, and nothing once it's fully open.

Pareto: accessibility returns to the pre-#9401 behavior during the expand animation; painting, layout and hit testing are unchanged, and the fully open and collapsed states produce the same semantics tree as before.

Validation

  • Added tests: collapsible_sliver_body_test.dart opens a 10-row section and, one frame in, checks that screen readers reach exactly the rows above the painted extent (rows 0 to 3), then that all ten are reachable once open. It fails without the override (Row 4 reachable while drawn below the clip).
  • Full mobile suite and just mobile-check pass locally.
  • No visible change, so no screenshots or app run; the change only affects the semantics tree during the expand animation.

The lazy section body clips painting during the expand animation but
did not report that clip to the semantics compiler, so rows still under
the clip were reachable by screen readers until the animation finished.

Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Signed-off-by: Tom Brow <[email protected]>
@brow
brow marked this pull request as ready for review November 12, 2026 19:59
@brow
brow requested a review from a team as a code owner November 12, 2026 19:59
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-12T20:00:41.238873Z 24f554d Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@michaelfransen
michaelfransen merged commit 7ad776f into mfransen/lazy-channel-rows Nov 12, 2026
45 checks passed
@michaelfransen
michaelfransen deleted the fix-9401-sliver-semantics-clip branch November 12, 2026 20:33
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.

3 participants