9395 Commits

Author SHA1 Message Date
Matthew Kosarek
a99fb28619
Resolving and piping the view ID through the WidgetController and the TestPointer so that clicks wind up on the right view (#178941)
## What's new?
- While coming up with a scheme for testing multi-window, I realize that
issuing taps in `testWidgets` across views was not working because the
view was always being set to `0`
- The fix is to resolve the view when we can, and provide an optional
view in the other methods

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-12-01 18:25:39 +00:00
Michael Goderbauer
022b155d1b
Make tree green again by fixing lints (#179186)
Fallout from https://github.com/flutter/flutter/issues/178827 and
merging PRs that weren't updated.
2025-11-27 14:23:09 +00:00
ANUJ KUMAR
96550423aa
Fixed changing supportedLocales fails to update the locale (#178526)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Recompute the resolved locale in LocalizationsResolver.update(...) and
notify listeners
only when the resolved locale actually changes. Previously, updating
WidgetsApp.supportedLocales
did not always propagate to the app locale because the resolver did not
re-resolve and
notify listeners. This change fixes that bug and adds unit tests.

Fixes
[https://github.com/flutter/flutter/issues/117210](https://github.com/flutter/flutter/issues/117210)

## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: anuj.kumar <anuj.kumar@powerup.money>
2025-11-26 23:00:41 +00:00
Ahmed Mohamed Sameh
7ef942bad7
Make sure that a CupertinoActivityIndicator doesn't crash in 0x0 envi… (#178565)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoActivityIndicator widget.
2025-11-26 22:56:56 +00:00
Kate Lovett
9d96df2364
Modernize framework lints (#179089)
WIP

Commits separated as follows:
- Update lints in analysis_options files
- Run `dart fix --apply`
- Clean up leftover analysis issues 
- Run `dart format .` in the right places.

Local analysis and testing passes. Checking CI now.

Part of https://github.com/flutter/flutter/issues/178827
- Adoption of flutter_lints in examples/api coming in a separate change
(cc @loic-sharma)

## Pre-launch 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-26 01:10:39 +00:00
auto-submit[bot]
0e4cb8e86d
Reverts "Add framework-side hitTestBehavior support to Semantics (#178817)" (#179100)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#178817
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: Piinks
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: change was landed during tree closure
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: flutter-zl
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
This is a reland of #177570, which was reverted in #178744 due to test
failures.

The original PR introduced `hitTestBehavior` to the semantics framework
but incorrectly applied `opaque` behavior to `ModalRoute`, which blocked
platform views from receiving pointer events.

Instead of making the entire modal opaque, we:
1. Keep `ModalRoute` without explicit `hitTestBehavior` (defaults to
`defer`)
2. Make only the dialog/sheet content opaque (blocks clicks to barrier)
3. Platform views remain clickable because they're outside the opaque
content boundary

Fixes #149001
Original PR: #177570
Revert: #178744

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-11-25 22:51:47 +00:00
zhongliugo
8f3f89f75e
Add framework-side hitTestBehavior support to Semantics (#178817)
This is a reland of #177570, which was reverted in #178744 due to test
failures.

The original PR introduced `hitTestBehavior` to the semantics framework
but incorrectly applied `opaque` behavior to `ModalRoute`, which blocked
platform views from receiving pointer events.

Instead of making the entire modal opaque, we:
1. Keep `ModalRoute` without explicit `hitTestBehavior` (defaults to
`defer`)
2. Make only the dialog/sheet content opaque (blocks clicks to barrier)
3. Platform views remain clickable because they're outside the opaque
content boundary

Fixes #149001
Original PR: #177570
Revert: #178744
2025-11-25 18:16:49 +00:00
Matthew Kosarek
084deda0ba
Add tooltip windows to the windowing API alongside the window positioning logic (#177404)
## What's new?
- Added tooltips to the windowing API, but they have no implementation
for the time being
- Added the `WindowPostiioner` logic to the windowing API
- Wrote a lot of tests 🧪 

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-11-25 15:23:04 +00:00
LongCatIsLooong
68115a705f
Remove semantics geometry shortcircuit (#178680)
Fixes https://github.com/flutter/flutter/issues/173097

The semantics flush is ~200 μs slower with the shortcuircut removed +
#177477 (which reduces the time increase by ~ 100 μs, from 876 μs to 773
μs) I tried to introduce caching in [a different
patch](https://github.com/flutter/flutter/compare/master...LongCatIsLooong:semantics-geometry?expand=1)
but that patch is more risky and still needs a cleanup.

773 μs doesn't seem bad considering there were little to no geometry
updates between frames before the fix. Introducing cache currently only
improves `Semantics.ensureGeometry` by less than 100 μs and is much more
risky / harder to ensure the correctness.

### BEFORE
```
[bench_material3_scroll_semantics] name: bench_material3_scroll_semantics
SEMANTICS: (samples: 98 clean/2 outliers/100 measured/300 total)
 | average: 567.0510204081633 μs
 | outlier average: 799 μs
 | outlier/clean ratio: 1.4090442856885785x
 | noise: 13.95%

Semantics.updateChildren: (samples: 91 clean/9 outliers/100 measured/300 total)
 | average: 58.9010989010989 μs
 | outlier average: 199.88888888888889 μs
 | outlier/clean ratio: 3.3936359867330017x
 | noise: 82.78%

Semantics.ensureGeometry: (samples: 95 clean/5 outliers/100 measured/300 total)
 | average: 95.46315789473684 μs
 | outlier average: 299 μs
 | outlier/clean ratio: 3.1320983570404675x
 | noise: 64.29%

Semantics.ensureSemanticsNode: (samples: 100 clean/0 outliers/100 measured/300 total)
 | average: 78.59 μs
 | outlier average: 78.59 μs
 | outlier/clean ratio: 1x
 | noise: 80.86%

drawFrameDuration: (samples: 98 clean/2 outliers/100 measured/300 total)
 | average: 1685.6938775510205 μs
 | outlier average: 2000 μs
 | outlier/clean ratio: 1.1864550418285935x
 | noise: 7.77%```
```
### AFTER (with this and https://github.com/flutter/flutter/pull/177477)
```
[bench_material3_scroll_semantics] name: bench_material3_scroll_semantics
SEMANTICS: (samples: 91 clean/9 outliers/100 measured/300 total)
 | average: 773.1098901098901 μs
 | outlier average: 1000 μs
 | outlier/clean ratio: 1.2934771793669069x
 | noise: 10.65%

Semantics.updateChildren: (samples: 94 clean/6 outliers/100 measured/300 total)
 | average: 48.648936170212764 μs
 | outlier average: 200 μs
 | outlier/clean ratio: 4.111086813907719x
 | noise: 102.15%

Semantics.ensureGeometry: (samples: 95 clean/5 outliers/100 measured/300 total)
 | average: 239.55789473684212 μs
 | outlier average: 399.6 μs
 | outlier/clean ratio: 1.6680727656208807x
 | noise: 22.05%

Semantics.ensureSemanticsNode: (samples: 99 clean/1 outliers/100 measured/300 total)
 | average: 194.5151515151515 μs
 | outlier average: 400 μs
 | outlier/clean ratio: 2.0563950771148156x
 | noise: 31.31%

drawFrameDuration: (samples: 95 clean/5 outliers/100 measured/300 total)
 | average: 1775.8315789473684 μs
 | outlier average: 2099.6 μs
 | outlier/clean ratio: 1.1823193285280729x
 | noise: 7.56%
```


## Pre-launch 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-25 10:19:39 +00:00
Bruno Leroux
34602626f2
Add an assert message when OverlayEntry.remove is called twice (#178163)
## Description

This PR adds an assert message to help users understand the error
occuring when `OverlayEntry.remove` is called twice. It also adds a
comment about calling dispose after removal as this is mandatory since
github.com/flutter/flutter/issues/102794.

## Related Issue

Fixes ["Failed assertion: line 207 pos 12: '_overlay != null': is not
true" when trying to remove a non null
overlayEntry](https://github.com/flutter/flutter/issues/145466)
Related external issue:
https://github.com/LanarsInc/top-snackbar-flutter/issues/80

## Tests

- Adds 1 test.
2025-11-25 08:32:56 +00:00
Ahmed Mohamed Sameh
12b5c1cfdf
Make sure that a SearchAnchor doesn't crash in 0x0 environment (#177749)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the SearchAnchor
widget.

---------

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-22 01:12:08 +00:00
Ahmed Mohamed Sameh
f64ddb8cb8
Make sure that a Stepper doesn't crash in 0x0 environment (#178068)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the Stepper widget.

---------

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-22 01:10:00 +00:00
Ahmed Mohamed Sameh
7698266eb1
Make sure that a UserAccountsDrawerHeader doesn't crash in 0x0 enviro… (#178516)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
UserAccountsDrawerHeader widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-22 01:07:39 +00:00
Ahmed Mohamed Sameh
f5e342ecb2
Make sure that a TimePickerDialog doesn't crash in 0x0 environment (#178451)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TimePickerDialog
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-22 01:07:38 +00:00
Ahmed Mohamed Sameh
3ff025970a
Make sure that a CupertinoLinearActivityIndicator doesn't crash in 0x… (#178566)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoLinearActivityIndicator widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-22 01:06:40 +00:00
Ahmed Mohamed Sameh
946edbc5f9
Make sure that a CupertinoTabBar doesn't crash in 0x0 environment (#178613)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoTabBar
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-22 01:05:56 +00:00
Ahmed Mohamed Sameh
c213a54279
Make sure that a CupertinoContextMenu doesn't crash in 0x0 environment (#178722)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoContextMenu widget.
2025-11-22 01:02:57 +00:00
Kevin Moore
153fd7fc60
Manually roll material_color_utilities (#170000)
This updates Flutter to the latest release, which includes a bunch of
code cleanup that should improve compiled code size and (hopefully)
runtime performance.

The changes in https://github.com/flutter/flutter/pull/153385 (discussed
in
https://docs.flutter.dev/release/breaking-changes/material-design-3-token-update)
seem to have been incomplete.

This PR effectively catches up with these changes by updating the "math"
behind primary, secondary, tertiary, error colors.

There is a pending PR on the site to update the corresponding docs:
https://github.com/flutter/website/pull/12125

Fixes https://github.com/flutter/flutter/issues/177285
2025-11-21 20:32:29 +00:00
Ahmed Mohamed Sameh
c5d2104166
Make sure that a TextSelectionToolbarTextButton doesn't crash in 0x0 … (#178374)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
TextSelectionToolbarTextButton widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-21 00:01:49 +00:00
Ahmed Mohamed Sameh
63ef482845
Make sure that a CupertinoSpellCheckSuggestionsToolbar doesn't crash … (#177978)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoSpellCheckSuggestionsToolbar widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-21 00:00:42 +00:00
Ahmed Mohamed Sameh
c2e3f39ae8
Make sure that a TabBar doesn't crash in 0x0 environment (#178201)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TabBar widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-21 00:00:42 +00:00
Ahmed Mohamed Sameh
27d62d07e7
Make sure that a ToggleButtons doesn't crash in 0x0 environment (#178454)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the ToggleButtons
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-20 23:59:29 +00:00
Valentin Vignal
caa84ba097
Allow the RawAutocomplete to display the options even when one is selected (#177705)
Fixes https://github.com/flutter/flutter/issues/177429 


## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-19 22:26:12 +00:00
Kostia Sokolovskyi
2fff488d60
Fix train hopping animation status listeners (#178372)
Fixes https://github.com/flutter/flutter/issues/178336

### Description

- Fixes `TrainHoppingAnimation` to notify status listeners when `status`
changes
- Adds tests

## Pre-launch Checklist

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-19 07:12:19 +00:00
Ahmed Mohamed Sameh
452314c7d2
Make sure that a ReorderableListView doesn't crash in 0x0 environment (#177646)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
ReorderableListView widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-19 06:50:12 +00:00
Ahmed Mohamed Sameh
7a6d2faa58
Make sure that a TabPageSelector doesn't crash in 0x0 environment (#178156)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TabPageSelector
widget.
2025-11-19 03:55:20 +00:00
auto-submit[bot]
3421c03394
Reverts "Add framework-side hitTestBehavior support for Semantics widget and apply to ModalRoute (#177570)" (#178744)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#177570
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: chingjun
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Broke internal tests.
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: flutter-zl
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Fix premature dialog dismissal on Flutter Web when semantics are enabled
by correctly propagating hitTestBehavior through the semantics pipeline
and declaring modal routes as opaque to pointer events.

Before change
https://dialog-dismiss-before.web.app/

Click on the "Show Dialog" button.
Click anywhere inside the dialog that is not a form field.
Observe the dialog being dismissed.

After change
https://dialog-dimiss-after.web.app/

Click on the "Show Dialog" button.
Click anywhere inside the dialog that is not a form field.
Observe the dialog not dismissed.

Fixes: #149001
Engine work: #176974
<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-11-18 17:44:48 +00:00
zhongliugo
1cc0f499f0
Add framework-side hitTestBehavior support for Semantics widget and apply to ModalRoute (#177570)
Fix premature dialog dismissal on Flutter Web when semantics are enabled
by correctly propagating hitTestBehavior through the semantics pipeline
and declaring modal routes as opaque to pointer events.

Before change
https://dialog-dismiss-before.web.app/

Click on the "Show Dialog" button.
Click anywhere inside the dialog that is not a form field.
Observe the dialog being dismissed.

After change
https://dialog-dimiss-after.web.app/

Click on the "Show Dialog" button.
Click anywhere inside the dialog that is not a form field.
Observe the dialog not dismissed.

Fixes: #149001
Engine work: #176974
2025-11-18 05:39:04 +00:00
LongCatIsLooong
f5b0b09264
Make a11y computeChildGeometry slightly faster (#177477)
This is not a fix for #166173, it's only a by-product. The fix will be
in separate PR, this includes the unrelated code changes to make that PR
smaller.

According to `bench_material3_semantics`, this reduces
`Semantics.ensureGeometry` by ~100 μs (321.6 μs -> 228.9 μs).

## Pre-launch 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.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-17 23:24:02 +00:00
Bruno Leroux
cbfa8f452d
Fix DropdownMenu width when decorationBuilder provides label (#178465)
## Description

This PR fixes `DropdownMenu` preferred width calculation to include the
label provided by `DropdownMenu.decorationBuilder`.

## Before

<img width="225" height="63" alt="Image"
src="https://github.com/user-attachments/assets/47dbec7d-c59c-4379-8f22-792c844f6ac4"
/>

## After

<img width="225" height="63" alt="Image"
src="https://github.com/user-attachments/assets/d4223e56-2b3f-4e12-893a-284ceb3b8ea4"
/>

## Related Issue

Fixes [DropdownMenu wrong width when decorationBuilder provides label
](https://github.com/flutter/flutter/issues/178459)

## Tests

- Adds 2 tests.
2025-11-17 22:16:01 +00:00
Bruno Leroux
4b33f98a01
Add DropdownMenuFormField.decorationBuilder (#178640)
## Description

This PR adds `DropdownMenuFormField.decorationBuilder` and passes it to
the underlying `DropdownMenu`.

## Related Issue

Follow-up to https://github.com/flutter/flutter/pull/176264 which added
`DropdownMenu.decorationBuilder`.

## Tests

- Adds 1 test.
2025-11-17 22:14:49 +00:00
Bernardo Ferrari
1814874c2d
Add a RepeatingAnimationBuilder API (#174014)
Implements / Close https://github.com/flutter/flutter/issues/174011

Probably there are 400 LOC of comments + tests, so this removes more
code than adds.

<img width="1509" height="649" alt="diff"
src="https://github.com/user-attachments/assets/cd961ddc-3b79-4ffd-8e9a-a806d5743f17"
/>
2025-11-15 05:17:26 +00:00
Justin McCandless
89d59da9ea
Image GIF pausing (#176492)
Flutter needs a strong story around pausing animated GIFs because it
affects accessibility via
[MediaQueryData.disableAnimations](https://main-api.flutter.dev/flutter/widgets/MediaQueryData/disableAnimations.html).
See https://github.com/flutter/flutter/issues/175516.

### Today

Currently, it's possible to pause a gif using TickerProvider. However,
if paused on initial load, the first frame will never display, and I
believe that's a bug.

```dart
TickerMode(
  // Pauses the gif, but if set to false on first load, the first frame never loads.
  enabled: false,
  child: Image(image: myAnimatedGif),
),
```

Currently `disableAnimations` has no effect:

```dart
MediaQuery(
  // Currently has no effect on the Image, until this PR.
  data: MediaQueryData(disableAnimations: true),
  child: Image(image: myAnimatedGif),
),
```

### With this PR

* MediaQueryData.disableAnimations can be used to pause a gif in the
same way that TickerMode can be used today.
* If either MediaQuery.disableAnimations or TickerMode cause a gif to be
paused on first load, it will show its first frame before pausing. This
is potentially a breaking change.
  * The docs clearly explain this behavior and how to pause a gif.

Fixes https://github.com/flutter/flutter/issues/175516
Partial fix for https://github.com/flutter/flutter/issues/130976
Fixes Google b/419605327
2025-11-13 18:34:51 +00:00
Ahmed Mohamed Sameh
8758971f69
Make sure that a TabBarView doesn't crash in 0x0 environment (#178202)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TabBarView
widget.
2025-11-12 20:17:55 +00:00
Onnimanni Hannonen
1d268f4bf6
Add focus support for CupertinoActionSheetAction #166398 (#167119)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

### This PR fixes #166398
- Adds focus support for `CupertinoActionSheetAction`. This makes it
work with keyboard shortcuts
- Creates new widget, `CupertinoTraversalGroup` that applies a Cupertino
style focus border around its child when any of its descendant has focus
- Employs `CupertinoTraversalGroup` in `CupertinoActionSheet`

How the new implementation looks and behaves:

https://github.com/user-attachments/assets/ea6789f1-921d-4598-bcca-489dc063ff73

How the native counterpart looks and behaves:

https://github.com/user-attachments/assets/4c6ae2a0-7205-4de2-b981-ec7f4839da6e

## Pre-launch Checklist

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-12 04:35:43 +00:00
Thomas Guerin
4ef262721c
[Animation] Add granular frame forcing to animations (#173862)
This change adds opt-in, subtree-scoped frame forcing for Flutter
animations as described in
https://github.com/flutter/flutter/issues/174356#issuecomment-3287185284

Fixes https://github.com/flutter/flutter/issues/174356

This change could help fix #133533. 

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-11-11 23:34:27 +00:00
Ahmed Mohamed Sameh
4330dd416c
Make sure that a DefaultTabController doesn't crash in 0x0 environment (#178117)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
DefaultTabController widget.
2025-11-11 19:10:51 +00:00
auto-submit[bot]
ef29db350f
Reverts "Feat: Add a11y for loading indicators (#165173)" (#178316)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#165173
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: chingjun
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: The PR did not finish "Google Testing", and
actually caused several failures in Google
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: rkishan516
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {chunhtai, flutter-zl}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Feat: Add a11y for loading indicators
fixes: #161631 

## Pre-launch Checklist

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

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-11-11 19:04:20 +00:00
Renzo Olivares
36b1877073
Listen to text spacing overrides on the web (#178081)
Original PR/Discussion: https://github.com/flutter/flutter/pull/172915

# Framework:
* `EditableText`/`SelectableText`, applies
`lineHeightScaleFactorOverride`, `wordSpacingOverride`, and
`letterSpacingOverride` to it's `TextStyle` similarly to how we already
do for bold platform overrides. Note `SelectableText` is built on
`EditableText` so it also applies these overrides.
* `Text`, applies `lineHeightScaleFactorOverride`,
`wordSpacingOverride`, and `letterSpacingOverride` to it's `TextStyle`
similarly to how we already do for bold platform overrides.
* Exposes line height override through
`MediaQueryData.lineHeightScaleFactorOverride` and
`maybeLineHeightScaleFactorOverrideOf(context)`.
* Exposes letter spacing override through
`MediaQueryData.letterSpacingOverride` and
`maybeLetterSpacingOverrideOf(context)`.
* Exposes word spacing override through
`MediaQueryData.wordSpacingOverride` and
`maybeWordSpacingOverrideOf(context)`.
* Exposes paragraph spacing override through
`MediaQueryData.paragraphSpacingOverride` and
`maybeParagraphSpacingOverrideOf(context)`.
* `MediaQuery.applyTextStyleOverrides()` \
`MediaQueryData.applyTextStyleOverrides()` to be able to reset/override
the text spacing settings on `MediaQueryData`.

# Engine:
* Introduces new members on `PlatformDispatcher` API that hold the text
spacing properties that are overridden on the web.
* We provide the `lineHeightScaleFactorOverride`,
`letterSpacingOverride`, `wordSpacingOverride`, and
`paragraphSpacingOverride` on the web by attaching a `ResizeObserver` to
an off-screen hidden element, when its size changes we capture its text
spacing CSS properties, and notify the framework through
`onMetricsChanged`.

Fixes #142712


https://github.com/user-attachments/assets/aaaa3e74-c232-4956-acd2-ae1a4487e415

## Pre-launch Checklist

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

---------

Co-authored-by: Renzo Olivares <roliv@google.com>
2025-11-11 18:44:19 +00:00
Kishan Rathore
e5f799a631
refactor: Migrate Expansible animation properties to AnimationStyle for a less broad API surface (#177966)
## Changes

* Add animationStyle to Exapnsible
* Mark duration, curve and reverseCurve as deprecated
* Add data driven fixes

fixes: #177799

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-11-11 18:41:59 +00:00
Kishan Rathore
2981516d74
Feat: Add a11y for loading indicators (#165173)
Feat: Add a11y for loading indicators
fixes: #161631 

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-11-11 06:17:40 +00:00
Ahmed Mohamed Sameh
45fe915122
Make sure that a RefreshIndicator doesn't crash in 0x0 environment (#177644)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the RefreshIndicator
widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-11 01:01:06 +00:00
Ahmed Mohamed Sameh
1b40c01079
Make sure that a TextFormField doesn't crash in 0x0 environment (#178233)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TextFormField
widget.
2025-11-11 00:47:14 +00:00
Qun Cheng
fccfa978a9
Reland "Refactor OverlayPortal semantics (#173005)" (#178095)
Reverts flutter/flutter#178007

This PR is to reland https://github.com/flutter/flutter/pull/173005 and
add a fix to avoid infinite loop. The fix doesn't contain engine
changes.
2025-11-11 00:35:40 +00:00
Ahmed Mohamed Sameh
c99db0dc0d
Make sure that a Tab doesn't crash in 0x0 environment (#178118)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the Tab widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-11 00:34:17 +00:00
Ahmed Mohamed Sameh
b076f52ee1
Make sure that a TabPageSelectorIndicator doesn't crash in 0x0 enviro… (#178212)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
TabPageSelectorIndicator widget.
2025-11-11 00:34:17 +00:00
Ahmed Mohamed Sameh
951b3cad03
Make sure that a TextField doesn't crash in 0x0 environment (#178232)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TextField widget.
2025-11-11 00:34:16 +00:00
Ahmed Mohamed Sameh
b705072f08
Make sure that a TextButton doesn't crash in 0x0 environment (#178213)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the TextButton
widget.
2025-11-11 00:32:16 +00:00
Huy
ab919febb3
Fix VoiceOver does not announce state of ButtonSegment (#175635)
- Fix https://github.com/flutter/flutter/issues/146987
- As explained at
https://github.com/flutter/flutter/issues/146987#issuecomment-3294737075:
this PR proposes _replacing_ `checked` with `selected` here:
 

f4de70c647/packages/flutter/lib/src/material/segmented_button.dart (L634)
 
Then VoiceOver can indicate when the button segment is selected. It's
_replacing_ action but not _adding_ because _adding_ (keep both
`checked` and `selected`) will cause the button to be read with both
checked and selected states with Android TalkBack reader that may cause
confusion to users (watch demo videos). I also did test with iOS
segmented control (storyboard) and Android Jetpack Compose to compare:
on these native platforms, it announces `selected` state (watch demo
videos).

<details>
<summary>Demo Flutter app - after the fix</summary>

| Flutter Android | Flutter iOS |
| --------------- | --------------- |
<video
src="https://github.com/user-attachments/assets/458c9b78-8275-45db-83cb-b2581505d240"/>
| <video
src="https://github.com/user-attachments/assets/1c69694d-67f8-4f8c-a453-2cf7696e43b5"/>

</details>

<details>
<summary>Demo native platforms</summary>

| Android Jetpack Compose | iOS segmented control (storyboard) |
| --------------- | --------------- |
<video
src="https://github.com/user-attachments/assets/5b682c7e-4c50-49be-a613-58673154aa88"/>
| <video
src="https://github.com/user-attachments/assets/9faba9ea-d373-4756-953a-cde510871247"/>

</details>

## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

Signed-off-by: huycozy <huy@nevercode.io>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-11-10 22:43:23 +00:00
Ahmed Mohamed Sameh
1746ce8e05
Make sure that a SelectableText doesn't crash in 0x0 environment (#177875)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the SelectableText
widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-11-10 21:24:02 +00:00