Skip to content

fix: allow page routes to opt out of route semantics - #182556 - #12674

Open
haashem wants to merge 2 commits into
flutter:mainfrom
haashem:fix-168915-route-semantics
Open

fix: allow page routes to opt out of route semantics - #182556#12674
haashem wants to merge 2 commits into
flutter:mainfrom
haashem:fix-168915-route-semantics

Conversation

@haashem

@haashem haashem commented Aug 28, 2026

Copy link
Copy Markdown

Nested navigators may use routes to update only part of the visible screen. However, Material and Cupertino page routes currently introduce a semantics route scope, causing screen readers to treat these updates as navigation to a new screen.

This adds includeRouteSemantics to:

  • MaterialPageRoute
  • MaterialPage
  • CupertinoPageRoute
  • CupertinoPage

The option defaults to true, preserving existing behavior. When set to false, the route content is not wrapped in a semantics node with scopesRoute: true.

Tests cover both imperative routes and declarative pages.

Fixes flutter/flutter#168915.

Pre-Review Checklist

  • [✅] I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • [✅] I read the Tree Hygiene wiki page, which explains my responsibilities.
  • [✅] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
  • [✅] I signed the CLA.
  • [✅] I listed at least one issue that this PR fixes in the description above.
  • [✅] I updated/added relevant documentation (doc comments with ///).
  • [✅] I added new tests to check the change I am making, or this PR is [test-exempt].
  • [✅] I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
  • [✅] All existing and new tests are passing.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds an includeRouteSemantics option (defaulting to true) to CupertinoPageRoute, CupertinoPage, MaterialPageRoute, and MaterialPage, allowing them to opt out of introducing a semantics route scope. The review feedback suggests making the underlying _includeRouteSemantics getter public on both CupertinoRouteTransitionMixin and MaterialRouteTransitionMixin. This change would allow custom routes to override the property, simplify the overrides in the route and page classes, and enable reusing the documentation template via macros.

Comment thread packages/cupertino_ui/lib/src/route.dart Outdated
Comment thread packages/cupertino_ui/lib/src/route.dart Outdated
Comment thread packages/cupertino_ui/lib/src/route.dart Outdated
Comment thread packages/cupertino_ui/lib/src/route.dart Outdated
Comment thread packages/cupertino_ui/lib/src/route.dart Outdated
Comment thread packages/material_ui/lib/src/page.dart Outdated
Comment thread packages/material_ui/lib/src/page.dart Outdated
Comment thread packages/material_ui/lib/src/page.dart Outdated
Comment thread packages/material_ui/lib/src/page.dart Outdated
Comment thread packages/material_ui/lib/src/page.dart Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

p: cupertino_ui p: material_ui triage-design Should be looked at in design triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[go_router] Voice over drops reading BottomNavigationBar selected tab when it becomes selected

1 participant