Sitelet https://github.com/flutter/flutter/pull/185475
Skip to content

Accessibility: Add semanticLabel to MenuAnchor. Fixes #184876. - #185475

Closed
mbcorona wants to merge 3 commits into
flutter:masterfrom
mbcorona:fix/a11y-menu-anchor-label
Closed

mbcorona wants to merge 3 commits into
flutter:masterfrom
mbcorona:fix/a11y-menu-anchor-label

Conversation

@mbcorona

Copy link
Copy Markdown
Member

Description

This PR adds a semanticLabel property to the MenuAnchor widget to improve accessibility.

Previously, there was no way to add an accessibility label to the expanded menu overlay, causing screen readers (like VoiceOver and TalkBack) to remain silent or announce unhelpful information when the menu was opened. This change passes the semanticLabel down to the Semantics node wrapping the _Submenu in _buildOverlay, ensuring the expanded menu is properly announced to users relying on accessibility tools.

Related Issues

Fixes #184876

Pre-launch Checklist

@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 a semanticLabel property to the MenuAnchor widget to provide accessibility labels for the menu overlay and includes a test case for verification. Feedback recommends correcting the documentation terminology from dialog to menu and setting container to true on the Semantics widget to ensure proper accessibility tree association.

Comment thread packages/flutter/lib/src/material/menu_anchor.dart Outdated
Comment thread packages/flutter/lib/src/material/menu_anchor.dart Outdated
@github-actions github-actions Bot added framework flutter/packages/flutter repository. See also f: labels. p: material_ui material_ui package in flutter/packages labels Apr 23, 2026
@mbcorona mbcorona self-assigned this Apr 23, 2026
@mbcorona
mbcorona requested a review from chunhtai April 23, 2026 18:07
@chunhtai

Copy link
Copy Markdown
Contributor

remain silent or announce unhelpful information when the menu was opened. This change passes the semanticLabel down to the Semantics node wrapping the _Submenu in _buildOverlay, ensuring the expanded menu is properly announced to users relying on accessibility tools.

Even with this change, the talkback will still not announce anything when the menu open right?

@chunhtai chunhtai added the waiting for response The Flutter team cannot make further progress on this issue until the original reporter responds label Apr 23, 2026
@github-actions github-actions Bot added d: api docs Issues with https://api.flutter.dev/ d: examples Sample code and demos labels Apr 23, 2026
@mbcorona

Copy link
Copy Markdown
Member Author

Hi @chunhtai.

You are right. I've added the SemanticsService.announce call inside _handleMenuOpenRequest.

I also updated the MyCascadingMenu API example to include a semanticLabel and verified the behavior locally with VoiceOver on Chrome.

@github-actions github-actions Bot removed the waiting for response The Flutter team cannot make further progress on this issue until the original reporter responds label Apr 23, 2026

@chunhtai chunhtai 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.

Also since the MenuAnchor is currently under code freeze due to decoupling, i am going to turn this into draft

showOverlay();

if (widget.semanticLabel != null) {
SemanticsService.announce(widget.semanticLabel!, Directionality.of(context));

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.

We shouldn't reuse semantics label like this, people using the label may be surprised that it will be used for announcement when opening the menu.

It also feels like not something we should include in the API. and instead developer can add the SemanticsService.announce in onOpen or onClose callback. Unless there some predefined string that native menu always announce.

@chunhtai
chunhtai marked this pull request as draft April 24, 2026 17:00
@Piinks Piinks added the Decoupling: Not ready to port yet Instructions will be provided when this is ready to move to flutter/packages. label Jun 24, 2026
@Piinks

Piinks commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

I've marked this PR as not ready to port to flutter/packages yet.
We'll provide instructions to move this change over to material_ui/cupertino_ui once ready to receive PRs. Thank you!

The changes not in the material or cupertino libraries will remain here.

@mbcorona

mbcorona commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

Closing this PR in favor of flutter/packages#12806

@mbcorona mbcorona closed this Sep 9, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Sep 11, 2026
…icLabel to MenuAnchor" (#12806)

Ports flutter/flutter#185475 to `material_ui`, following the instructions in flutter/flutter#188444. The commits were cherry-picked from the original PR, with only file paths adjusted for this repo.

`MenuAnchor` had no way to label the expanded menu overlay, so screen readers announced nothing useful when a menu opened. This adds a `semanticLabel` property, applied to a `Semantics` node wrapping the submenu in `_buildOverlay`, and only when a label is provided.

The original PR also announced the label with `SemanticsService.announce` when the menu opened. Following @chunhtai's review feedback on flutter/flutter#185475, that part is dropped here: a semantics label should not double as announcement text, and anyone who wants an announcement can call `SemanticsService.announce` from `onOpen`. The last commit on this branch removes it.

## Tests

New test `MenuAnchor applies semanticLabel to the expanded menu overlay` in `packages/material_ui/test/menu_anchor_test.dart`, checking that the label is absent before the menu opens and present once it expands. The `menu_anchor.0` API example now sets a `semanticLabel`, and its example test still passes.

Fixes flutter/flutter#184876

Supersedes flutter/flutter#185475, which will be closed with a pointer to this PR.

## Pre-Review Checklist

**Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
dkwingsmt pushed a commit to dkwingsmt/flutter that referenced this pull request Sep 15, 2026
…r#192809)

flutter/packages@9caa77c...bebbb57

2026-09-15 5684363+tenninebt@users.noreply.github.com
[google_maps_flutter_platform_interface] Add onPointOfInterestTap
support (flutter/packages#12752)
2026-09-14 stuartmorgan@google.com [google_maps_flutter] Adopts new
async/await Swift Pigeon support (flutter/packages#12860)
2026-09-14 109692895+Massinissa-Mouhoub@users.noreply.github.com
[material_ui] Fix `todayBorder` color being overridden by
`todayForegroundColor` in `YearPicker` (flutter/packages#12697)
2026-09-13 engine-flutter-autoroll@skia.org Roll Flutter from
2553f89 to 8b3e8f5 (4 revisions) (flutter/packages#12856)
2026-09-12 stuartmorgan@google.com [google_maps_flutter] Convert
remaining code to Swift (flutter/packages#12768)
2026-09-12 engine-flutter-autoroll@skia.org Roll Flutter from
63b9518 to 2553f89 (62 revisions) (flutter/packages#12855)
2026-09-12 engine-flutter-autoroll@skia.org Roll Flutter (stable) from
d3b14c8 to 9584c67 (15 revisions) (flutter/packages#12854)
2026-09-12 36861262+QuncCccccc@users.noreply.github.com [material_ui]
Update gen_defaults color helper (flutter/packages#12846)
2026-09-11 brunocorona.alcantar@gmail.com [material_ui] Port
flutter/flutter flutter#185475 "Accessibility: Add semanticLabel to MenuAnchor"
(flutter/packages#12806)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

d: api docs Issues with https://api.flutter.dev/ d: examples Sample code and demos Decoupling: Not ready to port yet Instructions will be provided when this is ready to move to flutter/packages. framework flutter/packages/flutter repository. See also f: labels. p: material_ui material_ui package in flutter/packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

No Accessibility label on expanded menu of MenuAnchor

3 participants