26332 Commits

Author SHA1 Message Date
flutter-pub-roller-bot
f89275a408
Roll pub packages (#181054)
This PR was generated by `flutter update-packages --force-upgrade`.
2026-01-16 02:28:01 +00:00
Onnimanni Hannonen
df73099467
Implement superellipse support for CupertinoFocusHalo (#180724)
This PR closes #180719

Related to
[this](https://github.com/flutter/flutter/pull/179224#discussion_r2669696069)
and
[this](https://github.com/flutter/flutter/pull/179225#discussion_r2637744198).

## 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
2026-01-15 07:30:33 +00:00
Qun Cheng
518addc0dd
Update localizations from translation console (#180997)
Some new strings were added to the **widgets** layer(like "Search
results found", "no results found" and etc.) but never got translated
for a long time. Since the issue in g3 has been fixed and the
translation in g3 has finished, this PR is to back-integrate the
translation to framework.

This PR doesn't run the date_localization script. Will update it in a
separate PR.

## 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.
2026-01-15 02:55:21 +00:00
Jon Mountjoy
bc0ef2c81e
Add RouteSettings to showCupertinoSheet (#178643)
This PR adds missing RouteSettings to `showCupertinoSheet`

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

## 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: Tong Mu <dkwingsmt@users.noreply.github.com>
2026-01-15 00:40:08 +00:00
Ben Konyi
8af18377be
[ Tool ] Ensure flutter.version.json is regenerated on upgrade (#180857)
The tool performs various checks to determine whether or not to
regenerate version information as part of a `flutter upgrade` instead of
just regenerating `flutter.version.json` as part of each `flutter
upgrade`. This has lead to some situations where the actual framework
version doesn't match that reported by the `flutter.version.json`.

This change updates `flutter upgrade` to always regenerate
`flutter.version.json` after checking out the new version of the
framework to ensure that it contains the latest version information.

Fixes https://github.com/flutter/flutter/issues/178926
2026-01-14 20:11:00 +00:00
flutter-pub-roller-bot
d6af20551e
Roll pub packages (#180977)
This PR was generated by `flutter update-packages --force-upgrade`.
2026-01-14 18:05:45 +00:00
Kostia Sokolovskyi
5e417dc812
Fix RangeSlider dragged cursor handling. (#179988)
Fixes #179987

### Description
- Fixes dragged cursor handling in `RangeSlider`
- Replaces `MaterialState` occurrences with `WidgetState`
- Updates tests to ensure that all cases are covered

| Before | After |
| - | - |
| <video
src="https://github.com/user-attachments/assets/756b01e0-e52b-4280-af5e-ef02a6081855"
/> | <video
src="https://github.com/user-attachments/assets/5bd37714-740d-4056-ac7d-b57773a89e62"
/> |

## 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].

<!-- 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
2026-01-14 14:58:57 +00:00
flutter-pub-roller-bot
4a42c23a85
Roll pub packages (#180928)
This PR was generated by `flutter update-packages --force-upgrade`.
2026-01-13 22:13:08 +00:00
Victoria Ashworth
d316469e1d
Add Flutter as a Swift Package dependency (#178931)
The main purpose of this PR is to add the Flutter framework as a Swift
Package dependency. As such, Xcode will now handle the copying,
thinning, and codesigning of the framework and therefore the Flutter
Xcode Run Scripts shouldn't.

This will allow plugins to declare a dependency on the Flutter framework
package and eliminate the need for the Pre-Action "prepare" script.

This PR does not technically make the Flutter framework a local package
override, that will be added in a follow up PR:
https://github.com/flutter/flutter/pull/179512

This change includes:
* Generation of the FlutterFramework swift package (this will generate a
Package.swift and symlink to the Flutter framework in the artifact
cache)
<img width="400" height="271" alt="Screenshot 2025-12-04 at 4 54 43 PM"
src="https://github.com/user-attachments/assets/6cfde6da-3698-4b76-b3b1-725f91fbf58d"
/>
* Adding the FlutterFramework as a dependency to the
FlutterGeneratedPluginSwiftPackage (which the the Swift package the
Xcode project has a dependency on)
<img width="400" height="195" alt="Screenshot 2025-12-04 at 4 55 13 PM"
src="https://github.com/user-attachments/assets/30fa402a-6a11-4df0-b2cd-a4a82197e50a"
/>

### Change to Flutter Run Scripts
Flutter currently has 3 Xcode Run Scripts:
* prepare (happens in a scheme pre-action)
* [PREVIOUS] Via `flutter assemble` - copies the Flutter framework from
engine build cache to `BUILT_PRODUCTS_DIR`
* [NEW] Same as previous except skips codesigning. This is still
included to accommodate plugins that don't have a dependency declared on
the Flutter framework.
* build (happens in first Run Script in the Xcode build phases that
happens before compiling)
* [PREVIOUS] Via `flutter assemble` - copies, thins, and codesigns
Flutter framework into `BUILT_PRODUCTS_DIR`
  * [NEW] Is skipped, Xcode now does this
* embed_and_thin (happens in second Run Script in the Xcode build phases
after compiling, linking, and embedding)
* [PREVIOUS] Copies Flutter framework from `BUILT_PRODUCTS_DIR` to
`TARGET_BUILD_DIR`
  * [NEW] 
* Validates Flutter framework in `BUILT_PRODUCTS_DIR` &
`TARGET_BUILD_DIR` (which would have been put there by Xcode via
SwiftPM) matches the Flutter framework in the engine cache.
    * If it matches, do not copy. Xcode now does this.
    * If it doesn't:
* Call `flutter assemble` to copy the correct Flutter framework into
`BUILT_PRODUCTS_DIR`
      * Then copy from `BUILT_PRODUCTS_DIR` to `TARGET_BUILD_DIR`.

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

## 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
2026-01-13 17:58:58 +00:00
Ahmed Mohamed Sameh
48c247582e
Make sure that a FocusScope doesn't crash in 0x0 environment (#180715)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the FocusScope
widget.
2026-01-13 17:45:17 +00:00
Ben Konyi
d47b499157
[ Tool ] Handle DartDevelopmentServiceException when launching web applications (#180905)
DWDS can throw `DartDvelopmentServiceException` if DDS fails to connect
to DWDS due to the target application shutting down immediately after
launch.

This change adds logic to catch this exception and exit gracefully.

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

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-13 17:41:57 +00:00
flutter-pub-roller-bot
b45a73b1dc
Roll pub packages (#180900)
This PR was generated by `flutter update-packages --force-upgrade`.
2026-01-13 16:16:56 +00:00
Ahmed Mohamed Sameh
7e176f8c3f
Make sure that an ErrorWidget doesn't crash in 0x0 environment (#180830)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the ErrorWidget
widget.
2026-01-13 16:12:57 +00:00
Ahmed Mohamed Sameh
beb57ada90
Make sure that a Banner doesn't crash in 0x0 environment (#180254)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the Banner widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2026-01-13 16:11:26 +00:00
Huy
fa41ee32cb
Add TabBar API example for scroll notification integration (#180728)
- A part of: https://github.com/flutter/flutter/issues/123965
- Description: This PR adds an example that came from
https://github.com/flutter/flutter/issues/123965#issuecomment-3722456594
as a workaround. I bring it into an API example so that users can find
it easier.
The example showcases how to apply custom behavior based on the scroll
in TabBar. It utilizes scroll notifications (ScrollMetricsNotification
and ScrollNotification) within NotificationListener callback to monitor
the scroll offset, allowing for interface customization based on the
obtained offset.

<details open>
<summary>Demo</summary>


https://github.com/user-attachments/assets/75999f31-e468-4bba-9c14-bf4f3c8fcd9a

</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.
- [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

---------

Signed-off-by: huycozy <huy@nevercode.io>
2026-01-13 16:07:02 +00:00
Ahmed Mohamed Sameh
793b0b89e8
Make sure that a FormField doesn't crash at 0x0 environment (#180810)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the FormField widget.
2026-01-13 16:05:42 +00:00
Ahmed Mohamed Sameh
44fc0a77e8
Make sure that a DisplayFeatureSubScreen doesn't crash in 0x0 environ… (#180357)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
DisplayFeatureSubScreen widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2026-01-13 16:04:07 +00:00
Michael Goderbauer
96fc83154d
Manually roll test dependencies (#180886)
Manually updating test dependencies because the pub autoroller seems
busted, https://github.com/flutter/flutter/issues/180503.

This one required manually updating the pubspec files because `flutter
update-packages --force-upgrade` also seemed unable to deal with the
fact that multiple dependencies across packages had to be updated in
sync. There's probably also something broken with the `flutter
update-packages` command. This is something that used to work.
2026-01-13 14:11:10 +00:00
Augusto César Perin
404221c326
Fix RawAutocomplete unmounted crash during async optionsBuilder (#180824)
Adds a mounted check after the async optionsBuilder call to prevent
accessing state on an unmounted widget.

Fixes #170403

## 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
2026-01-12 19:32:46 +00:00
GowsikRaja
cccf0f1977
Add API sample and docs for Expansible widget (#180273)
This PR adds an API example demonstrating how to use the Expansible
widget,
including programmatic control via ExpansibleController.

Changes included:
- Added a Material API example for Expansible
- Added a widget test for the API example
- Added documentation comments linking to the example

This addresses the request for improved Expansible documentation and
usage
examples.

Fixes #178698
2026-01-12 17:54:38 +00:00
Ben Konyi
4e92c27d57
[ Tool ] Fix flutter run -d all crash (#180845)
661b8edef229499c0a919f4fd6ceebf935529243 introduced changes related to
build hooks that made assumptions about the value of the detected target
platform, effectively restricting `flutter run` to targeting single
devices.

This change fixes the regression which prevented developers from
deploying their application to multiple devices with `flutter run -d
all`.

Fixes https://github.com/flutter/flutter/issues/179857
2026-01-12 17:35:40 +00:00
chunhtai
d81cd3e6f6
Migrate doc and code to use sendAnnounce (#180776)
<!--
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
-->

as title

## 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
2026-01-12 17:32:54 +00:00
Ahmed Mohamed Sameh
4b5de7dbfc
Make sure that a FlutterLogo doesn't crash in 0x0 environment (#180617)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the FlutterLogo
widget.
2026-01-12 04:32:33 +00:00
Ahmed Mohamed Sameh
eb95ba422b
Make sure that a CupertinoTabScaffold doesn't crash in 0x0 environment (#179824)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoTabScaffold widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2026-01-10 03:07:23 +00:00
Ahmed Mohamed Sameh
5566fdd30c
Make sure that a Container doesn't crash in 0x0 environment (#180350)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the Container widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2026-01-10 01:05:19 +00:00
Ahmed Mohamed Sameh
4b3f1d599f
Make sure that an Expansible doesn't crash in 0x0 environment (#180478)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the Expansible
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2026-01-10 01:05:19 +00:00
Tong Mu
cfb3f18e1d
Merge widget_tester_leaks_free_test.dart into widget_tester_test.dart (#180600)
When https://github.com/flutter/flutter/pull/176519 was authored, there
were no CI shards that run `flutter_test` with leak tests, and therefore
the test had to be placed in a separate file. Now that
https://github.com/flutter/flutter/pull/176992 has added misc leak
tracking, the test case can be placed in the same file as other tests
for `WidgetTester`.

## 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
2026-01-09 23:59:44 +00:00
John "codefu" McDole
1ccfb37b0f
fix: there are no riscv fuchsia artifacts (#180779)
In #178711, `packages/flutter_tools/lib/src/flutter_cache.dart` was
updated to add 'riscv' downloading in the `FlutterRunnerDebugSymbols`.
This class is not well named and is responsible for downloading "the
debug symbols for flutter runner for Fuchsia development."

We do not produce fuchsia riscv.

Fixes #180775
2026-01-09 23:47:35 +00:00
Hannah Jin
5d37c99f13
[A11y ] Add clearSemanticsin table (#180665)
According to comments in `rendering/object.dart`, If new
[SemanticsNode]s are instantiated in [assembleSemanticsNode] they must
be disposed in [clearSemantics].


fix: https://github.com/flutter/flutter/issues/180666 

## 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
2026-01-09 19:40:31 +00:00
Valentin Haudiquet
a3c12e636d
[ Tool ] Add support for linux riscv64 architecture (#178711)
This adds support for buildind desktop linux applications for riscv64 on
the flutter tool, as well as basic riscv64 support for the tool.

This is a first move towards fixing #99963. Along with
https://github.com/flutter/flutter/pull/178712 that allows building an
engine for `riscv64`, this PR allows me to build and run the flutter
'hello world' app on RISC-V hardware:

<img width="1920" height="1080" alt="Screenshot from 2025-11-18
08-58-03"
src="https://github.com/user-attachments/assets/5e90bc7f-49a7-41a8-82b7-5a5d3247938a"
/>

This allows someone who built a flutter engine and exposed it on a
webserver to run commands like:
```
export FLUTTER_STORAGE_BASE_URL=http://your-server-url
flutter
flutter doctor
cd example/hello_world && flutter build linux
```

This means that even if Google does not want to support Flutter on
RISC-V officially (hosting the artifacts), community-managed servers
could host the RISC-V flutter engines/artifacts. It also means that
internally, companies using Flutter on RISC-V would just have to build
their engine and setup such a server, and it allows them to use the
upstream Flutter tool.

## 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 `///`).
- [ ] 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

---------

Co-authored-by: John "codefu" McDole <codefu@google.com>
2026-01-09 19:29:20 +00:00
auto-submit[bot]
0cfc04170d
Reverts "Unpin google_mobile_ads (#180573)" (#180761)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#180573
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jtmcdole
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: broke in post submit. Requires running the
lockfile generation script

<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: goderbauer
<!-- end_original_pr_author -->

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

<!-- start_revert_body -->
This change reverts the following previous change:
Fixes https://github.com/flutter/flutter/issues/156912.

Fly-by clean-up: With the recent bump to Xcode I believe pinning
`google_mobile_ads` is no longer necessary.

I verified locally with `flutter build ios --verbose` that the
`dev/benchmarks/platform_views_layout` build successfully.

<details>
<summary>Build Log</summary>

```
$ flutter build ios 
Resolving dependencies in `/Users/goderbauer/dev/flutter`... 
Downloading packages... 
  _fe_analyzer_shared 89.0.0 (92.0.0 available)
  adaptive_breakpoints 0.1.7 (discontinued)
  analyzer 8.2.0 (9.0.0 available)
  archive 3.6.1 (4.0.7 available)
  device_info 2.0.3 (discontinued replaced by device_info_plus)
  ffigen 18.1.0 (20.1.1 available)
  gcloud 0.8.19 (0.9.0 available)
  googleapis 12.0.0 (15.0.0 available)
  googleapis_auth 1.6.0 (2.0.0 available)
  isolate 2.1.1 (discontinued)
  js 0.7.2 (discontinued)
  metrics_center 1.0.13 (1.0.14 available)
  pedantic 1.11.1 (discontinued replaced by lints)
  petitparser 6.1.0 (7.0.1 available)
  shelf_web_socket 2.0.1 (3.0.0 available)
  xml 6.5.0 (6.6.1 available)
Got dependencies in `/Users/goderbauer/dev/flutter`!
5 packages are discontinued.
11 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.
Building com.yourcompany.platformViewsLayout for device (ios-release)...
To ensure your app continues to launch on upcoming iOS versions, UIScene lifecycle support will soon be required. Please see https://flutter.dev/to/uiscene-migration for the migration guide.


Warning: Missing build name (CFBundleShortVersionString).
Warning: Missing build number (CFBundleVersion).
Action Required: You must set a build name and number in the pubspec.yaml file version field before submitting to the App Store.
Found saved certificate choice "Apple Development: Michael Goderbauer (WY4DWBNV57)". To clear, use "flutter config --clear-ios-signing-settings".
Developer identity "Apple Development: Michael Goderbauer (WY4DWBNV57)" selected for iOS code signing
Running pod install...                                           1,233ms
Running Xcode build...                                                  
Xcode build done.                                           32.5s
✓ Built build/ios/iphoneos/Runner.app (20.9MB)
```

</details>
<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2026-01-09 18:27:47 +00:00
Kishimoto
61b241292e
Fix typo in dropdown_menu.dart (#180172)
## Description
Fix typo in dropdown_menu.dart ( fixes
https://github.com/flutter/flutter/issues/180171 )

## 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.
2026-01-09 16:47:07 +00:00
Michael Goderbauer
c1e1dc260f
Unpin google_mobile_ads (#180573)
Fixes https://github.com/flutter/flutter/issues/156912.

Fly-by clean-up: With the recent bump to Xcode I believe pinning
`google_mobile_ads` is no longer necessary.

I verified locally with `flutter build ios --verbose` that the
`dev/benchmarks/platform_views_layout` build successfully.

<details>
<summary>Build Log</summary>

```
$ flutter build ios 
Resolving dependencies in `/Users/goderbauer/dev/flutter`... 
Downloading packages... 
  _fe_analyzer_shared 89.0.0 (92.0.0 available)
  adaptive_breakpoints 0.1.7 (discontinued)
  analyzer 8.2.0 (9.0.0 available)
  archive 3.6.1 (4.0.7 available)
  device_info 2.0.3 (discontinued replaced by device_info_plus)
  ffigen 18.1.0 (20.1.1 available)
  gcloud 0.8.19 (0.9.0 available)
  googleapis 12.0.0 (15.0.0 available)
  googleapis_auth 1.6.0 (2.0.0 available)
  isolate 2.1.1 (discontinued)
  js 0.7.2 (discontinued)
  metrics_center 1.0.13 (1.0.14 available)
  pedantic 1.11.1 (discontinued replaced by lints)
  petitparser 6.1.0 (7.0.1 available)
  shelf_web_socket 2.0.1 (3.0.0 available)
  xml 6.5.0 (6.6.1 available)
Got dependencies in `/Users/goderbauer/dev/flutter`!
5 packages are discontinued.
11 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.
Building com.yourcompany.platformViewsLayout for device (ios-release)...
To ensure your app continues to launch on upcoming iOS versions, UIScene lifecycle support will soon be required. Please see https://flutter.dev/to/uiscene-migration for the migration guide.


Warning: Missing build name (CFBundleShortVersionString).
Warning: Missing build number (CFBundleVersion).
Action Required: You must set a build name and number in the pubspec.yaml file version field before submitting to the App Store.
Found saved certificate choice "Apple Development: Michael Goderbauer (WY4DWBNV57)". To clear, use "flutter config --clear-ios-signing-settings".
Developer identity "Apple Development: Michael Goderbauer (WY4DWBNV57)" selected for iOS code signing
Running pod install...                                           1,233ms
Running Xcode build...                                                  
Xcode build done.                                           32.5s
✓ Built build/ios/iphoneos/Runner.app (20.9MB)
```

</details>
2026-01-09 15:59:08 +00:00
auto-submit[bot]
96403e0fa5
Reverts "Fix iOS xattr removal to clear all extended attributes (#180355)" (#180709)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#180355
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jmagman
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: this broke post-submit 
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: Saqib198
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {vashworth, jmagman}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Fixed iOS code signing failures caused by extended attributes like
com.apple.provenance.

Problem: On macOS 15+ with Xcode 26.1+, iOS builds fail during code
signing with:
resource fork, Finder information, or similar detritus not allowed

This happens because com.apple.provenance (added by cloud storage
services, Finder, or file downloads) was not being removed - only
com.apple.FinderInfo was cleared.

Fix: Changed xattr -r -d com.apple.FinderInfo to xattr -cr to remove ALL
extended attributes recursively.

Fixes #180351

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.
<!-- end_revert_body -->

The error:
```
Could not delete `/opt/s/w/ir/x/w/rc/tmpxc3h1o2b/flutter sdk/dev/integration_tests/flavors/build/ios/Debug Paid-iphoneos/Flutter` because it was not created by the build system and it is not a subfolder of derived data.
     note: To mark this directory as deletable by the build system, run `xattr -w com.apple.xcode.CreatedByBuildSystem true '/opt/s/w/ir/x/w/rc/tmpxc3h1o2b/flutter sdk/dev/integration_tests/flavors/build/ios/Debug Paid-iphoneos/Flutter'` when it is created.
```

https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8693206125415137281/+/u/run_flavors_test_ios/stdout

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2026-01-08 23:26:27 +00:00
Ahmed Mohamed Sameh
a6bcce63f5
Make sure that an EditableText doesn't crash in 0x0 environment (#180457)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the EditableText
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2026-01-08 22:02:41 +00:00
Matthew Kosarek
e064e75676
Implementation of tooltip windows for win32 (#179147)
## What's new?
- Implemented tooltip windows for the Win32 platform
- Implemented size-to-content on Win32
- Wired up the window metrics event with constraints
- Updated the example application to demonstrate tooltips
- Wrote a bunch of unit 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.

---------

Co-authored-by: Matej Knopp <matej.knopp@gmail.com>
2026-01-08 21:53:56 +00:00
Mouad Debbar
40d28b0e9c
[web] Don't serve files outside of project (#180699)
Fixes internal bug: b/463611148
2026-01-08 21:40:32 +00:00
Kostia Sokolovskyi
3892c57dd6
Add new motion accessibility features to iOS. (#178102)
Closes https://github.com/flutter/flutter/issues/177330
Contributes to https://github.com/flutter/flutter/issues/175878

### Description

This PR implements support for three new iOS accessibility motion
features.
- `Auto-Play Animated Images`: Informs the app when the user has chosen
to pause automatically playing GIFs and other animated content.
- `Auto-Play Video Previews`: Informs the app when the user has disabled
the automatic playback of video previews.
- `Prefer Non-Blinking Cursor`: Informs the app that the user prefers a
non-blinking text insertion indicator in editable text fields.

The original issue requested seven features. I was able to find and
implement features with clear, public, and general-purpose APIs.

The remaining features were not included for the following reasons:

- `Vehicle Motion Cues`: No public API found.
- `Auto-Play Message Effects`: No public API found. This is likely a
feature exclusive to the Messages framework.
- `Limit Frame Rate`: No public API found.
- `Dim Flashing Lights`: There is a public API available
[MADimFlashingLightsEnabled](https://developer.apple.com/documentation/mediaaccessibility/madimflashinglightsenabled()).
It is intended for media playback frameworks. It's unclear if exposing
this feature is necessary or actionable for a general-purpose
application UI.

| Feature Name | API | Flutter AccessibilityFeatures |
| :-: | :-: | :-: |
| Vehicle Motion Cues | - | - |
| Dim Flashing Lights |
[MADimFlashingLightsEnabled](https://developer.apple.com/documentation/mediaaccessibility/madimflashinglightsenabled())
| - |
| Auto-Play Animated Images |
[animatedImagesEnabled](https://developer.apple.com/documentation/accessibility/accessibilitysettings/animatedimagesenabled)
| autoPlayAnimatedImages |
| Auto-Play Video Previews |
[isVideoAutoplayEnabled](https://developer.apple.com/documentation/uikit/uiaccessibility/isvideoautoplayenabled)
| autoPlayVideos |
| Auto-Play Message Effects | - | - |
| Prefer Non-Blinking Cursor |
[prefersNonBlinkingTextInsertionIndicator](https://developer.apple.com/documentation/accessibility/accessibilitysettings/prefersnonblinkingtextinsertionindicator)
| deterministicCursor |
| Limit Frame Rate | - | - |

The `AccessibilityFeatures.swift` was introduced to refactor all native
iOS accessibility logic into a single, dedicated class. This change
moves the responsibility of querying settings and observing
notifications out of `FlutterViewController.mm`, which cleans up the
controller, simplifies future maintenance, and makes logic
unit-testable.

### Demo


https://github.com/user-attachments/assets/1b3e7a2f-03b4-4716-959e-dbeea938e4d2

<details closed><summary>Code sample</summary>

```dart
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Screen(),
    ),
  );
}

class Screen extends StatefulWidget {
  @override
  State<Screen> createState() => _ScreenState();
}

class _ScreenState extends State<Screen> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAccessibilityFeatures() {
    super.didChangeAccessibilityFeatures();
    if (mounted) {
      setState(() {});
    }
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final accessibilityFeatures = View.of(
      context,
    ).platformDispatcher.accessibilityFeatures;

    return Scaffold(
      body: Center(
        child: Column(
          spacing: 10,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            for (final feature in [
              'accessibleNavigation: ${accessibilityFeatures.accessibleNavigation}',
              'invertColors: ${accessibilityFeatures.invertColors}',
              'disableAnimations: ${accessibilityFeatures.disableAnimations}',
              'boldText: ${accessibilityFeatures.boldText}',
              'reduceMotion: ${accessibilityFeatures.reduceMotion}',
              'highContrast: ${accessibilityFeatures.highContrast}',
              'onOffSwitchLabels: ${accessibilityFeatures.onOffSwitchLabels}',
              'supportsAnnounce: ${accessibilityFeatures.supportsAnnounce}',
              'autoPlayAnimatedImages: ${accessibilityFeatures.autoPlayAnimatedImages}',
              'autoPlayVideos: ${accessibilityFeatures.autoPlayVideos}',
              'deterministicCursor: ${accessibilityFeatures.deterministicCursor}',
            ])
              Text(feature),
          ],
        ),
      ),
    );
  }
}
```

</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.
- [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: chunhtai <47866232+chunhtai@users.noreply.github.com>
2026-01-08 21:06:41 +00:00
Muhammad Saqib Javed
f004160865
Fix iOS xattr removal to clear all extended attributes (#180355)
Fixed iOS code signing failures caused by extended attributes like
com.apple.provenance.

Problem: On macOS 15+ with Xcode 26.1+, iOS builds fail during code
signing with:
resource fork, Finder information, or similar detritus not allowed

This happens because com.apple.provenance (added by cloud storage
services, Finder, or file downloads) was not being removed - only
com.apple.FinderInfo was cleared.

Fix: Changed xattr -r -d com.apple.FinderInfo to xattr -cr to remove ALL
extended attributes recursively.

Fixes #180351

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.
2026-01-08 20:30:53 +00:00
Ben Konyi
8cb340cd7a
[ Widget Preview ] Move widget_preview_scaffold tests to dev/integration_tests/widget_preview_scaffold (#180658)
Removes Flutter code from the flutter_tools test suite, which otherwise
only contains non-Flutter code.

Fixes https://github.com/flutter/flutter/issues/180080
2026-01-08 20:25:09 +00:00
Ben Konyi
8812db3594
[ Tool ] Fix flake in overall_experience_test.dart (#180655)
The diagnostics string builder responsible for building diagnostics
messages can sometimes wrap lines that are too long. This caused the
expectation for the 'flutter error messages include a DevTools links' to
sometimes be incorrect when run on systems where the absolute file path
of the file referenced in the diagnostic was too long.

This change updates the test expectation to allow for both wrapping and
non-wrapping scenarios to be accepted.

Fixes https://github.com/flutter/flutter/issues/174502
2026-01-08 15:47:53 +00:00
Nour
93cba59cee
flutter_tools: Auto-generate ExportOptions.plist for manual iOS code signing (#177888)
# flutter_tools: Auto-generate ExportOptions.plist for manual iOS code
signing

## Summary

Enhance `flutter build ipa` to automatically generate a complete
ExportOptions.plist for manual code signing configurations, eliminating
the need for users to create and maintain one manually.

**Fixes:** #177853

## Problem

When using manual code signing (`CODE_SIGN_STYLE=Manual`) with `flutter
build ipa` for Release/Profile builds, the archive succeeds but the
export step fails with:

```
error: exportArchive: "Runner.app" requires a provisioning profile with the Push Notifications and Sign in with Apple features.
```

**Root cause:** Flutter generated an incomplete ExportOptions.plist that
only included `method` and `uploadBitcode`. When using manual signing,
`xcodebuild -exportArchive` requires:
- `teamID` (from project's `DEVELOPMENT_TEAM`)
- `signingStyle=manual`
- `provisioningProfiles` (mapping bundle ID to provisioning profile
UUID)

Without these, Xcode cannot resolve the provisioning profile for export,
even if the profile is correctly configured and contains the required
entitlements.

## Solution

Enhanced `_createExportPlist()` in `BuildIOSArchiveCommand` to
automatically generate a complete ExportOptions.plist when:
1. `CODE_SIGN_STYLE=Manual` is detected for the main app target
2. Build mode is Release or Profile (production builds only)
3. A valid provisioning profile can be located and parsed

The generated plist includes:
- `method` (app-store, ad-hoc, enterprise, etc. - respects user's
`--export-method` flag)
- `teamID` (from `DEVELOPMENT_TEAM` build setting)
- `signingStyle=manual`
- `provisioningProfiles` mapping main app bundle ID to provisioning
profile UUID

**Fallback behavior:**
- If profile lookup fails: silently fall back to simple plist (no
regression)
- For Automatic signing: unchanged behavior
- For Debug builds: unchanged behavior (not App Store export)
- For multi-target apps (extensions): falls back to simple plist today
(see TODO below)

## Changes

### Core Implementation
- Added `ProfileData` class to encapsulate provisioning profile info
(UUID and name)
- Refactored profile handling into reusable static methods for
testability
- Enhanced `_createExportPlist()` with manual signing detection and
profile lookup
- Added `_findProvisioningProfileUuid()` to locate provisioning profiles
by specifier
- Added `_parseProvisioningProfileInfo()` to decode provisioning profile
data once
- Added comprehensive trace logging for debugging

### Testing
- Created `build_ipa_export_plist_test.dart` with 7 unit tests covering:
  - Manual signing with profile found → enhanced plist generated ✓
  - Automatic signing → simple plist (unchanged behavior) ✓
  - Debug builds → simple plist (unchanged behavior) ✓
  - Different export methods → respected in generated plist ✓
  - Profile lookup failures → fallback to simple plist ✓
  - Null codeSignStyle → handled gracefully ✓
- All existing flutter_tools tests continue to pass

## Documentation

Added extensive inline comments explaining:
- Enhancement conditions and fallback behavior
- Provisioning profile search strategy and error handling
- Performance and security considerations
- Future enhancements (multi-target support)

## Safety & Scope

### What This Fixes
-  Manual signing export failures for apps with Push Notifications /
Sign in with Apple
-  Auto-generates correct plist for **any** entitlements covered by
provisioning profile
-  Unblocks users from manual `--export-options-plist` workaround
-  Improves iOS build UX for enterprise teams doing manual signing

### What This Does NOT Change
-  Automatic signing behavior (unchanged)
-  Debug builds (unchanged)
-  CLI interface (no new flags)
-  Ad-hoc / enterprise distributions (unchanged if not using manual
signing)

### Known Limitations (Future Enhancements)
- Currently only supports single-target apps (main app bundle ID only)
- TODO: Multi-target apps with extensions (notification service,
widgets, watch, etc.) - each extension target bundle ID may need
separate entry in provisioningProfiles dict
- TODO: Support for multiple provisioning profiles if app uses multiple
signing identities

---

## Pre-merge Checklist

- [x] I have signed the CLA
- [x] I read the Contributor Guide and Tree Hygiene docs
- [x] I linked the issue this fixes (#177853) and explained the failure
scenario
- [x] I added documentation and trace logs so developers understand what
changed
- [x] I added comprehensive unit tests for the new behavior
- [x] All existing and new tests pass locally (`flutter test
packages/flutter_tools`)
- [x] Code passes linting (`dart analyze`)

## Safety Notes

- [x] This code only runs for manual code signing in `flutter build ipa`
for Release/Profile builds
- [x] Debug builds and automatic signing behavior are completely
unchanged
- [x] If no provisioning profile UUID is found, we silently fall back to
the old exportOptions.plist logic instead of failing
- [x] Added trace-level logging explaining success/fallback scenarios
for debugging
- [x] No breaking changes - existing workarounds continue to work
- [x] Minimal blast radius - only affects manual signing export path

## Verification

Users can verify the fix by:
1. Creating an iOS app with `CODE_SIGN_STYLE=Manual`, `DEVELOPMENT_TEAM`
set, and Push Notifications entitlements
2. Running `flutter build ipa --release --verbose`
3. Confirming the trace log shows "Generated ExportOptions.plist with
teamID, signingStyle=manual, and provisioningProfiles"
4. Verifying the IPA is successfully created without needing
`--export-options-plist`

---

## Related Issues
- #106612 - Support `flutter build ipa` with manual signing and
provisioning profiles
- #113977 - Flutter build IPA with --export-options-plist not working

---------

Co-authored-by: Elijah Okoroh <okorohelijah@google.com>
2026-01-08 12:09:39 +00:00
Mitchell Goodwin
c2b3ae1bfe
Do not dispose CupertinoSheetTransition animation on update and throw ticker error (#180609)
<!--
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
-->

Fixes #179337 by moving the disposal of an animation controller outside
of the didUpdate method flow. It was unnecessary to rebuild this
controller on update, and was originally put there to follow the pattern
of the other animations. However, unlike the other animations, this one
is not chained to animations from outside of the transition's place in
the tree, and was throwing exceptions from the ticker mixin in some
cases.

## 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
2026-01-08 02:43:27 +00:00
Mitchell Goodwin
1a86af3ff0
Add drag handle to CupertinoSheet (#179962)
Fixes #179358.

Adds the option to add a native styled drag handle to the top of a
Cupertino sheet through the `showDragHandle` property. By default this
is false, the same way it is for the native SwiftUI sheet.

Styling for the handle is based off of native versions of the handle,
and Apple's Figma files.

From this PR:
<img width="412" height="293" alt="Screenshot 2025-12-16 at 12 53 06 PM"
src="https://github.com/user-attachments/assets/b8f48179-775c-4f90-8930-0ca526e62d33"
/>

From the iOS Maps app (this sheet has a slight transparency)
<img width="401" height="132" alt="Screenshot 2025-12-16 at 12 53 15 PM"
src="https://github.com/user-attachments/assets/640b0736-0fe2-4713-81c9-b89c1c1ac41d"
/>

From the Figma files:
<img width="636" height="371" alt="Screenshot 2025-12-16 at 12 53 36 PM"
src="https://github.com/user-attachments/assets/a6fb7853-84f9-4728-85eb-ffdd6e1167cd"
/>

## 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.
- [ ] 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
2026-01-07 23:43:58 +00:00
Victor Sanni
6679464ef2
Raw tooltip with smaller API surface that exposes tooltip widget (#177678)
The raw widget used to make a
[Tooltip](https://api.flutter.dev/flutter/material/Tooltip-class.html).

Design doc: flutter.dev/go/codeshare-tooltip

## Constructor
```dart
class RawTooltip extends StatefulWidget {
  const RawTooltip({
    super.key,
    required this.semanticsTooltip,
    required this.tooltipBuilder,
    this.enableTapToDismiss = true,
    this.triggerMode = TooltipTriggerMode.longPress,
    this.enableFeedback = true,
    this.onTriggered,
    this.hoverDelay = Duration.zero,
    this.touchDelay = const Duration(milliseconds: 1500),
    this.dismissDelay = const Duration(milliseconds: 100),
    this.animationStyle = _kDefaultAnimationStyle,
    this.positionDelegate,
    required this.child,
  });
```

## Properties
```dart
  final String semanticsTooltip;
  final TooltipComponentBuilder tooltipBuilder;
  final Duration hoverDelay;
  final Duration touchDelay;
  final Duration dismissDelay;
  final bool enableTapToDismiss;
  final TooltipTriggerMode triggerMode;
  final bool enableFeedback;
  final TooltipTriggeredCallback? onTriggered;
  final AnimationStyle animationStyle;
  final TooltipPositionDelegate? positionDelegate;
  final Widget child;
```

Part of [☂️ Reinforcement: Add more basic components to the core
framework](https://github.com/flutter/flutter/issues/97496)
Part of [☂️ Reinforcement: Refactor widgets from design into the core
before decoupling](https://github.com/flutter/flutter/issues/53059)
Fixes [Custom Overlay for Tooltip Widget
](https://github.com/flutter/flutter/issues/45034)

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com>
2026-01-07 21:58:42 +00:00
Nhan Nguyen
78f49c6529
Fix Drawer.child docstring to say ListView instead of SliverList (#180326)
## Description

The docstring says "Typically a [SliverList]" but the class example uses
`ListView`.

`SliverList` is used inside `CustomScrollView`, not as a direct child of
`Drawer`.

## Related Issue

Fixes #100268
2026-01-07 21:00:38 +00:00
Emmanuel
5d46d0f0f7
New isSemantics and deprecate containsSemantics (#180538)
Fix #180534

## 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.
2026-01-07 20:05:09 +00:00
Victoria Ashworth
941130b9f1
Revert "Directly generate a Mach-O dynamic library using gen_snapshot [reland] (#174870) (#180639)
This reverts commit 4b6e0bdcfacd39f01fad4529217188db3ce516c8.

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

## 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
2026-01-07 18:39:55 +00:00
Michael Goderbauer
a5b3c4bd69
Run hook_user_defines and link_hook integration tests on CI (#180622)
Fixes https://github.com/flutter/flutter/issues/180575.

As per the
[readme](https://github.com/flutter/flutter/blob/master/dev/integration_tests/README.md#:~:text=Adding%20code%20to%20this%20directory%20will%20not%20automatically%20cause%20it%20to%20be%20run%20by%20any%20already%20existing%20ci%20tooling.),
tests in dev/integration_tests are not automatically run on CI:

> Adding code to this directory will not automatically cause it to be
run by any already existing ci tooling.

This PR fixes the problem by running the `hook_user_defines` and
`link_hook` integration tests as part of the tools integration test
shard.

One of the tests actually broke while it wasn't running on CI. This is
fixed by removing it from the workspace to ensure the local user-defines
in its pubspec are applied.
2026-01-07 16:52:25 +00:00
Илия
b2d157623e
Fix division by zero in RenderTable intrinsic size methods (#178217)
## Description

This PR fixes a division by zero crash in `RenderTable` when intrinsic
size methods are called on empty tables (0 rows × 0 columns) with
non-zero constraints.

### The Problem

When `RenderTable` has 0 columns and intrinsic size methods
(`computeMinIntrinsicHeight`, `computeMaxIntrinsicHeight`,
`computeMinIntrinsicWidth`, `computeMaxIntrinsicWidth`) are called with
non-zero width constraints, the code calls `_computeColumnWidths()`
without checking if the table is empty. This leads to division by zero
at line 1140:

```dart
final double delta = (minWidthConstraint - tableWidth) / columns;
// When columns = 0, this crashes with division by zero
```

### The Solution

Added early return checks `if (rows * columns == 0) return 0.0;` to all
four intrinsic size methods, matching the pattern already used by other
methods that call `_computeColumnWidths()`:

- `computeDryBaseline` (line 1242) - already has the check
- `computeDryLayout` (line 1274) - already has the check
- `performLayout` (line 1318) - already has the check
- `paint` (line 1461) - already has the check

Now all four intrinsic methods are consistent with the rest of the
codebase.

### Testing

Added comprehensive test coverage (`Empty table intrinsic dimensions
should not crash`) that:
- Creates an empty table (0×0)
- Calls all four intrinsic size methods with various constraints
- Verifies they return 0.0 without crashing

### Changes Made

**packages/flutter/lib/src/rendering/table.dart:**
- Added empty table check to `computeMinIntrinsicWidth` (line 963-965)
- Added empty table check to `computeMaxIntrinsicWidth` (line 978-980)
- Added empty table check to `computeMinIntrinsicHeight` (line 995-997)
- Added empty table check to `computeMaxIntrinsicHeight` (line
1016-1019)

**packages/flutter/test/rendering/table_test.dart:**
- Added test case `Empty table intrinsic dimensions should not crash`
- Tests all four intrinsic methods with both finite and infinite
constraints

## Related Issues

This fix addresses a potential crash when using `RenderTable` with
intrinsic sizing widgets (like `IntrinsicHeight`, `IntrinsicWidth`) on
empty tables.

## Checklist

Before you create this PR, confirm all the requirements listed below by
checking the relevant checkboxes (`[x]`). This will ensure a smooth
review process.

- [x] I have read the [Contributor Guide] and followed the process
outlined there for submitting PRs.
- [x] I have read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I have read and followed the [Flutter Style Guide], including
[Features we expect every widget to implement].
- [x] I have signed the [CLA].
- [x] I have listed at least one issue that this PR fixes (defensive
programming for edge case).
- [x] I have updated/added relevant documentation (doc comments with
`///`).
- [x] I have added new tests that verify the fix works.
- [x] All existing and new tests are passing (`flutter analyze` shows no
issues).
- [x] I have followed the [breaking change policy] and added [Data
Driven Fixes] where applicable (no breaking changes in this PR).

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

---------

Co-authored-by: Kate Lovett <katelovett@google.com>
2026-01-07 15:07:19 +00:00