25481 Commits

Author SHA1 Message Date
Matan Lurey
6d62770d08
Omit instruction to cd . after flutter create (#172513)
Closes https://github.com/flutter/flutter/issues/100588.
2025-07-22 22:45:14 +00:00
Alex Talebi
c45a67e4ac
Improve assertion message in AlignmentDirectional.resolve (#172096)
Replaces the generic assertion in `AlignmentDirectional.resolve` and
`_MixedAlignment.resolve` with
`debugCheckCanResolveTextDirection`.

This change provides a more helpful and descriptive error message when
the `TextDirection` is null, improving the developer experience by
clearly stating why the resolution failed and how to fix it.

Fixes: #171813, Fixes: #171814, also fixes: #171812

## 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
2025-07-22 22:11:01 +00:00
jesswrd
e12d263d3d
Update warnGradleVersion to 8.7.0 (#172576)
When using a lower Gradle version, a warning to update to at least 8.7.2
is shown, but 8.7.2 is not a valid version. Changed warnGradleVersion
from 8.7.2 to 8.7.0.

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

<!-- 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-07-22 21:20:08 +00:00
Matan Lurey
3038239932
Use a fake representation of cache/artifacts/gradle_wrapper (#172503)
... so that it doesn't require downloading cache artifacts to run
`general.shard/project_test.dart`.

Closes https://github.com/flutter/flutter/issues/83275.
2025-07-22 21:13:03 +00:00
Michael Goderbauer
6b7d92852c
Bump meta to 0.17.0 (#172541)
Unclear why the bot didn't bump this.
2025-07-22 17:51:20 +00:00
John "codefu" McDole
ff983d3598
feat: start using the content aware hash for downloading artifacts (#172552)
reland of https://github.com/flutter/flutter/pull/171927
towards https://github.com/flutter/flutter/issues/171790

Use the content aware hash when downloading engine artifacts. These are
currently produced when changes to DEPs, engine/, or the release file
are changed in a not-seen-before way.

We can eventually remove engine.version being tracked in release
branches as an optimization.

FLUTTER_PREBUILT_ENGINE_VERSION will stay for overriding the
engine.version for testing. Though Cocoon does not need to actually set
it for framework only PRs anymore.

fxies post submit tests for content_hash download:
SHARD=framework_tests SUBSHARD=misc dart --enable-asserts
dev/bots/test.dart
SHARD=tool_host_cross_arch_tests dart --enable-asserts
dev/bots/test.dart

```
  ╔═╡ERROR https://github.com/flutter/flutter/pull/1╞════════════════════════════════════════════════════════════════════
  ║ Expected "Flutter Engine Version: 45b085ab2118f30441ae6e2daab4b8eb3e4a063c", but found "Flutter Engine Version: 407c051ec9".
  ╚═══════════════════════════════════════════════════════════════════════════════
```

```
  Expected: contains '45b085ab2118f30441ae6e2daab4b8eb3e4a063c'
     Which: does not contain '45b085ab2118f30441ae6e2daab4b8eb3e4a063c'
```
2025-07-22 17:35:26 +00:00
Matan Lurey
d16e5b9971
Hide flutter assemble unless --verbose (#172508)
Towards https://github.com/flutter/flutter/issues/97505.
2025-07-22 05:34:22 +00:00
Huy
db38e71bfc
Fix PopupMenuButton crashes when being hidden immediately (#171970)
- Fix https://github.com/flutter/flutter/issues/171422 (and maybe also
https://github.com/flutter/flutter/issues/167180, and
https://github.com/flutter/flutter/issues/163477)
- Investigation: Per discussion in
https://github.com/flutter/flutter/issues/171422, the issue is probably
happening due to accessing inherited widgets via `context` in
`positionBuilder`(like `PopupMenuTheme`) when PopupMenu's State is
inactive. This PR proposed a fix by caching the necessary objects in
`didChangeDependencies` method. Some of `RenderBox` are also cached to
avoid another exception like _Cannot get renderObject of inactive
element._.This solution can also be seen at another widget like
`CalendarDatePicker`:


d6b2a95215/packages/flutter/lib/src/material/calendar_date_picker.dart (L225-L232)

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

| before | after |
| --------------- | --------------- |
<video
src="https://github.com/user-attachments/assets/2af0a4cb-216c-4033-bdd6-d288338bdf6b"/>
| <video
src="https://github.com/user-attachments/assets/c3e46f9c-9ead-4060-9df7-208bee7be740"/>

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

<!-- 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: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-07-22 03:16:48 +00:00
Victor Sanni
6a3ebfe3f3
Add hitTestChildren to baseline-aligned stack (#172485)
Fixes http://github.com/flutter/flutter/issues/171510
2025-07-22 03:13:06 +00:00
Matan Lurey
359b29382a
Omit w (widget tree), t (render tree) from flutter run --profile h (#172506)
Closes https://github.com/flutter/flutter/issues/91690.
2025-07-22 00:41:09 +00:00
Matan Lurey
ffd1baa342
Refactor checks for --machine (#172504)
Was already fixed in https://github.com/flutter/flutter/pull/150138, so
removes duplicate flag.

Already tested by existing test suite.
2025-07-22 00:41:08 +00:00
Ricardo Dalarme
f95c68ec14
feat(IconButton): add property to specify a states controller (#169821)
## Description

Enable specifying a custom statesController to the IconButton widget.
This increase consistency since other widgets expose this property as
well.

## Related Issues

- Closes https://github.com/flutter/flutter/issues/139372

## 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-07-22 00:33:25 +00:00
auto-submit[bot]
c5465e9eb7
Reverts "feat: start using the content aware hash for downloading artifacts (#171927)" (#172505)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#171927
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Broke the tree, due to naughty tests but too
intensive to fix forward.
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: jtmcdole
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {matanlurey, chingjun}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
towards #171790 

Use the content aware hash when downloading engine artifacts. These are
currently produced when changes to DEPs, engine/, or the release file
are changed in a not-seen-before way.

We can eventually remove `engine.version` being tracked in release
branches as an optimization.

`FLUTTER_PREBUILT_ENGINE_VERSION` will stay for overriding the
engine.version for testing. Though Cocoon does not need to actually set
it for framework only PRs anymore.
<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-07-21 23:09:47 +00:00
Kishan Rathore
89b7248437
Feat: Add momentary varient of CupertinoSlidingSegmentedControl (#164262)
This PR introduces a new boolean flag, `isMomentary`, to the
`CupertinoSlidingSegmentedControl` widget.

When `isMomentary` is set to `true`, the segmented control behaves like
a momentary switch. Selecting a segment triggers its associated action
(e.g., via `onValueChanged`), but the segment doesn't stay visually
selected after the interaction ends. The control visually returns to its
previous state or a default state (often no segment selected).

When `isMomentary` is `false` (the default behavior), the control
maintains the selection state visually, highlighting the last chosen
segment.

**Motivation**

Currently, `CupertinoSlidingSegmentedControl` always maintains a
selected state. There are use cases where developers might want to use
the segmented control purely for triggering actions without persisting a
visual selection state, similar to how a `UISegmentedControl` can be
configured on iOS with `isMomentary = true`. This provides more
flexibility and aligns the Flutter widget closer to its native
counterpart's capabilities.

For example, this could be useful for triggering sorting actions, view
changes, or other immediate operations where maintaining a persistent
"selected" state isn't desired or meaningful.

**Related Issues**
fixes: #164077 

**Videos**
UISegmentedControl behaviour when `isMomentary` flag is set to true.

https://github.com/user-attachments/assets/84d00312-4530-4b7a-9696-142f60ad89c0

CupertinoSlidingSegmentedControl behaviour when `isMomentary` flag is
set to true.

https://github.com/user-attachments/assets/b308b4fa-e641-417a-a518-4e0908876eed

## 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-07-21 20:59:34 +00:00
Matan Lurey
852760424a
Wrap ShutdownHook calls to avoid crashing the tool (#171917)
Closes https://github.com/flutter/flutter/issues/57351.
2025-07-21 18:41:08 +00:00
Valentin Vignal
257b4f524b
Add radioInnerRadius to RadioListTile (#171851)
Part of https://github.com/flutter/flutter/issues/168787

## 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
2025-07-21 17:49:21 +00:00
Srujan Gaddam
932cb033e6
Use baseUri always when doing a hot reload or hot restart (#172271)
We already use the baseUri when computing hot reload sources metadata as
it can never be null. The member is changed to be non-nullable to
reflect that.

To be consistent, we also use the baseUri (full url) for a hot restart
when running with the DDC library bundle format.

Related PR: https://github.com/dart-lang/webdev/pull/2650

## 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].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [x] 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].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
2025-07-21 17:40:57 +00:00
John "codefu" McDole
40992ec4f8
feat: start using the content aware hash for downloading artifacts (#171927)
towards #171790 

Use the content aware hash when downloading engine artifacts. These are
currently produced when changes to DEPs, engine/, or the release file
are changed in a not-seen-before way.

We can eventually remove `engine.version` being tracked in release
branches as an optimization.

`FLUTTER_PREBUILT_ENGINE_VERSION` will stay for overriding the
engine.version for testing. Though Cocoon does not need to actually set
it for framework only PRs anymore.
2025-07-21 17:41:44 +00:00
Matan Lurey
80f4a0f251
Add support for /? to alias to --help (#172328)
Closes https://github.com/flutter/flutter/issues/70616.
2025-07-21 17:20:08 +00:00
Jason Simmons
99b69feaca
Upgrade flutter_lints in project template pubspec.yaml files (#172400)
The version of flutter_lints used by newly created projects should match
the version used by flutter_tools. This ensures that "pub get --offline"
will work on a project that was generated by "flutter create".

Also restore the Mac tool_tests_commands that were temporarily disabled
in https://github.com/flutter/flutter/pull/172388

Fixes https://github.com/flutter/flutter/issues/172375
2025-07-21 17:11:59 +00:00
Matan Lurey
8667c183af
Adds (defaults to ___) when using flutter config --help (#172329)
Closes https://github.com/flutter/flutter/issues/81665.
2025-07-21 17:09:17 +00:00
Matan Lurey
5ed913b2db
Add a warning on usage of dartPluginClass: 'none'. (#172315)
Towards https://github.com/flutter/flutter/issues/57497.

Supersedes https://github.com/flutter/flutter/pull/171922 based on
@stuartmorgan-g's advice for a warning release.

I'll CP this into `3.35` (beta) so that we can clean it up on `master`
anytime.
2025-07-21 17:08:51 +00:00
Matan Lurey
599ed5252e
Skip [tool] crash reporting on --local-engine (#172326)
Closes https://github.com/flutter/flutter/issues/70238.
2025-07-21 17:08:51 +00:00
Matan Lurey
1c1f234b87
Remove IDE validation from flutter doctor (#171924)
Closes https://github.com/flutter/flutter/issues/61246.

I open to doing this behind a flag, but given we decided already 5 years
ago to do this, I'm leaning limiting this to an announcement
(`flutter-announce@`) and just landing this cleanup.

Open to suggestions.
2025-07-21 17:08:50 +00:00
Musaddiq Ahmed Khan
70a3c3cc93
Add optional splashColor property to ExpansionTile (#172224)
This PR adds support for customizing the `splashColor` in the
`ExpansionTile` widget.

Currently, ExpansionTile uses the theme’s default splash color without
allowing overrides.
This change introduces a new optional splashColor parameter so
developers can better control the ripple effect color when the tile is
tapped.

## 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: Victor Sanni <victorsanniay@gmail.com>
2025-07-20 02:13:21 +00:00
Harkirat Singh [SSW]
50bae580d4
Adopt Null-Aware Elements in packages/flutter/lib/src/material (#172285)
<!--
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 aims to complete #172188 by refactoring all files in
`packages/flutter/lib/src/material` to adopt Dart 3.8's null-aware
elements feature. Each file was refactored in its own commit for clear,
incremental changes and traceable history.

### Motivation

Following the
https://github.com/flutter/flutter/issues/172188#issuecomment-3076061395,
this PR is intentionally scoped to a single folder to keep the review
surface manageable. Migrating package by package enables more focused
code review, easier troubleshooting, and a safer incremental adoption of
the new language feature.

### Approach

- **Scope:** Only files under `packages/flutter/lib/src/material` have
been refactored.
- **Commits:** Each file refactored in its own commit for granularity
and traceability.
- **Code style:** Changed list element conditionals to use null-aware
elements where applicable, improving readability and reducing verbosity.

### Testing

- All existing tests were run after each change.
- All tests passed except for `chip_test.dart`, which was already
failing before these changes and continues to fail after. No new test
failures were introduced by this PR.

### Additional Notes

- No functional or behavioral changes were made; this is a pure refactor
for code clarity and modernization.
- Adhering to the incremental migration strategy proposed in the
referenced issue for safer and more effective review.

---

Ready for review! 🚀
## 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].

<!-- 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-07-18 20:00:09 +00:00
Justin McCandless
b327336e31
TestTextInput should reset its key handler between tests (#172323)
Looks like we forgot to reset _keyHandler in TestTextInput.

Fixes https://github.com/flutter/flutter/issues/171491
2025-07-18 19:52:51 +00:00
flutter-pub-roller-bot
e2a46f0e30
Roll pub packages (#172332)
This PR was generated by `flutter update-packages --force-upgrade`.
2025-07-18 00:32:29 +00:00
Matan Lurey
032b0f00b5
Refactor and forbid base/exit.dart outside of lib/runner.dart (#171923)
Closes https://github.com/flutter/flutter/issues/59338.
2025-07-17 23:16:25 +00:00
Justin McCandless
e244168327
Platform views shouldn't receive pointer events when not laid out (#172043)
This PR makes platform views ignore pointer events when they're not laid
out.

Platform views register themselves for global pointer events when their
RenderBox attaches:


9c626d9f9a/packages/flutter/lib/src/rendering/platform_view.dart (L370-L380)

But a RenderBox that is attached is not necessarily laid out. The
problem in the issue seemed to be that a page was created offscreen
(attached and not laid out), but it still received pointer events, and
this caused errors with using `size` before layout.

This PR simply ignores pointer events when not laid out.

Fixes https://github.com/flutter/flutter/issues/83481
2025-07-17 21:12:02 +00:00
Torikul Islam Topu
d2534e118d
feat: Add maxCount parameter to Badge.count constructor. (#171054)
feat: Add `maxCount` parameter to `Badge.count` constructor

This enhancement provides the ability to specify a **dynamic maximum
limit** for the badge count, offering greater flexibility and
eliminating the reliance on hardcoded values within the widget. This
allows developers to, for example, display "99+" instead of "100" or
"9+" instead of "10", improving UI consistency and preventing overly
large numbers on badges.

---

## Description of Changes

This PR introduces a new optional parameter, `maxCount`, to the
`Badge.count` constructor. This provides a flexible way to define a
numerical upper bound for the badge display.

Key aspects of this change:
* **Dynamic Limits:** Developers can now set custom maximum values
(e.g., 9, 99, 999) that, when exceeded, will display the `maxCount`
value followed by a `+` symbol (e.g., "9+", "99+").
* **Improved UI/UX:** Prevents large, potentially overflowing numbers
from appearing on badges, maintaining visual integrity and a cleaner
user interface.
* **Reduced Hardcoding:** Centralizes the logic for maximum badge values
within the `Badge` widget itself, reducing the need for manual checks
and conditional rendering outside the widget.
* **Comprehensive Documentation:** Includes updated API documentation
for the `maxCount` parameter, clarifying its usage, behavior, and the
visual outcome when the maximum is reached.

This change aligns with Flutter's principles of providing highly
customizable and intuitive widgets.

---

## 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. (Assuming no breaking changes)
- [X] All existing and new tests are passing.

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

[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-07-17 20:01:22 +00:00
LongCatIsLooong
844edbcd91
add debugPaintTextLayoutBoxes for debugging text layout (#168876)
Text vertical alignment is a common complaint and one of the most common
causes is different type faces being used in the same paragraph (for
instance, when there's English / Arabic in the same paragraph so the
default font doesn't contain the required glyphs for some characters).

Hopefully this flag is going to make debugging alignment issues a bit
easier, and in some github issues attaching screenshots with the flag on
will be helpful for diagnosing the issue.

### What the layout boxes look like 
```dart
final testText =
    'Quick brown fox, نص, trailing spaces${" " * 100}'
    'new line at the end.\n\n\n\n';

Column([
              Text(testText, style: TextStyle(height: kTextHeightNone)),
              Text(testText, style: TextStyle(height: 1.0)),
              Text(
                testText,
                style: TextStyle(height: kTextHeightNone),
                strutStyle: StrutStyle(fontSize: 30),
              ),
])
```
<img width="410" alt="image"
src="https://github.com/user-attachments/assets/788b8089-373f-4af0-9144-306b3e755614"
/>

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

<!-- 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-07-17 19:49:30 +00:00
Justin McCandless
fa961b768e
Fix mutating Paint bug (#171180)
A tricky bug was encountered in
https://github.com/flutter/flutter/pull/170321/files#r2138619243 where
mutating Paint caused
[paints](https://main-api.flutter.dev/flutter/flutter_test/paints.html)
to behave strangely.

Originally this PR just added something to the docs for `paints` to give
people a heads up, but now it fixes the root cause. Yak shave 🪒 .

Fixes https://github.com/flutter/flutter/issues/171194
2025-07-17 18:41:59 +00:00
Justin McCandless
f16f6d7f99
No SystemContextMenu when readOnly is true (#171242)
When readOnly is true, there is no TextInputConnection, so the
SystemContextMenu can't be shown. Instead, this shows the Flutter-drawn
context menu.

This video shows the change. You can slightly tell that the system
context menu is shown when readOnly is false and the Flutter-drawn
context menu is shown when it is true.



https://github.com/user-attachments/assets/91480fa4-cce6-4d63-ae11-df72a229da73


This is the same root cause as
https://github.com/flutter/flutter/pull/169238.

Fixes https://github.com/flutter/flutter/issues/170521
2025-07-17 18:40:50 +00:00
Muhammad Mohiuddin
0d999f39e9
Add a getter to get the recorder used by painting context (#170223)
Fixes #169990

## 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
2025-07-17 17:56:09 +00:00
Harry Terkelsen
97aae2ad39
Properly lay out and position RenderWebImage (#171916)
Fixes https://github.com/flutter/flutter/issues/163288
Fixes https://github.com/flutter/flutter/issues/164405

The previous behavior of `RenderWebImage` for layout and positioning did
not work for all values of `BoxFit` and `AlignmentGeometry`. This PR
gets `RenderWebImage` to properly lay out and offset its child (the
`<img>` element).

## 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
2025-07-16 20:34:52 +00:00
Kostia Sokolovskyi
66281ce520
[web] Remove all usages of js_util. (#171871)
Closes https://github.com/flutter/flutter/issues/143396

### Description
- Removes `js_util` library usage across the codebase

In order to get rid of `dart.library.js_util` in
[`kIsWeb`](e8d56b25c0/packages/flutter/lib/src/foundation/constants.dart (L83))
constant the dart analyzer has to be updated first. For now, the
`dart.library.js_util` value is hardcoded in the source code:
1a88edceb7/pkg/analyzer/lib/src/dart/constant/evaluation.dart (L2908-L2915).
So we either have to update this value or wait for the
https://github.com/dart-lang/sdk/issues/50045 fix.

## 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].
- [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
2025-07-16 16:00:58 +00:00
Tong Mu
1f0041eb96
Add dartpad example to RoundedSuperellipseBorder (#172185)
Now that Web supports squircles, we can finally add this dartpad example
to `RoundedSuperellipseBorder`'s doc.



https://github.com/user-attachments/assets/855be690-d9a1-45ec-a262-e0c38cf75b63


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

<!-- 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-07-16 03:52:06 +00:00
flutter-pub-roller-bot
151eeb0e38
Roll pub packages (#172193)
This PR was generated by `flutter update-packages --force-upgrade`.
2025-07-16 01:05:07 +00:00
Mikhail Novoseltsev
adca65f43f
[Android] remove obsolete gradle api in FGP (#172085)
fixes #170791 

This PR replaces the deprecated (and removed in 9.0) Gradle fileMode API
in favor of filePermissions.
This change finally unlocks builds with gradle 9 (confirmed in smoke
tests, 9.0.0-rc.2 is the latest prerelease version to the date).

**Testing strategy**

There's an attempt to add a Kotlin unit test that confirms that
`filePermissions` were called during plugin application. I failed to
find a more precise way to check if the new code works as intended (such
as testing that permissions were really changed or something like that),
but on the other hand, it should not be required since it will transform
the test in a way that it will start to test Gradle APIs and their
behavior, and I believe it's a bit out of scope: Gradle APIs are tested
in Gradle tests :)

Anyway, this new test is a bit cumbersome because it's required to mock
all the behaviours related to variants configuration and capturing calls
– If it is not desired im not hesitant to remove it.

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

## 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
2025-07-15 21:11:53 +00:00
Ben Konyi
ec9e07d9b9
[ Tool ] Fix flutter upgrade stating that an upgrade is available on main when up to date (#172141)
The `frameworkVersion` string written to the version files wasn't
actually parsable by `GitTagVersion` as it didn't match the format
output by `git`.

This change updates the `frameworkVersion` format to use a `-` instead
of a `.` before the commit count and adds support to the version parsing
regex to handle both `.` and `-` separators before the commit count.

Fixes https://github.com/flutter/flutter/issues/172091
2025-07-15 01:00:38 +00:00
Loïc Sharma
6474b04e6d
Reland "Add feature flags to the framework" (#171545)
This relands https://github.com/flutter/flutter/pull/168437. The google3
fixes were landed in: https://github.com/flutter/flutter/pull/171547,
https://critique.corp.google.com/cl/781275353,
https://github.com/flutter/flutter/pull/171933.

This PR is split into two commits:

1. d6253794e8982348c5c21cb63e8f6bf785664be6, code from
https://github.com/flutter/flutter/pull/168437 without any changes
2. f35d29e4af630d2d4fdb0cda8686b6ff9f77227a, updates the PR to omit
obvious types.

Original PR description:

## Motivation

We'd like to let users opt-in to experimental features so that they can
give early feedback while we iterate on the feature. For example:

Example feature flags:

1. Android sensitive content:
https://github.com/flutter/flutter/pull/158473. When enabled, Flutter
will tell Android when the view contains sensitive content like a
password.
3. Desktop multi-window. When enabled, Flutter will use child windows to
allow things like a context menu to "escape" outside of the current
window.

### Use case

Users will be able to turn on features by:

* **Option 1**: Run `flutter config --enable-my-feature`. This enables
the feature for all projects on the machine
* **Option 2**: Add `enable-my-feature: true` in their `pubspec.yaml`,
under the `flutter` section. This would enable the for a single project
on the machine.

Turning on a feature affects _both_ development-time (`flutter run`) and
deployment-time (`flutter build x`). For example, I can `flutter build
windows` to create an `.exe` with multi-window features enabled.

## How this works

This adds a new
[`runtimeId`](https://github.com/flutter/flutter/pull/168437/files#diff-0ded384225f19a4c34d43c7c11f7cb084ff3db947cfa82d8d52fc94c112bb2a7R243-R247)
property to the tool's `Feature` class. If a feature is on and has a
`runtimeId`, its `runtimeId` will be [stamped into the Dart application
as a Dart
define](https://github.com/flutter/flutter/pull/168437/files#diff-bd662448bdc2e6f50e47cd3b20b22b41a828561bce65cb4d54ea4f5011cc604eR293-R327).
The framework uses this Dart define to [determine which features are
enabled](https://github.com/flutter/flutter/pull/168437/files#diff-c8dbd5cd3103bc5be53c4ac5be8bdb9bf73e10cd5d8e4ac34e737fd1f8602d45).

### Multi-window example

https://github.com/flutter/flutter/pull/168697 shows how this new
feature flag system can be used to add a multi-window feature flag:

1. It adds a new [multi-window
feature](https://github.com/flutter/flutter/pull/168697/files#diff-0ded384225f19a4c34d43c7c11f7cb084ff3db947cfa82d8d52fc94c112bb2a7R189-R198)
to the Flutter tool. This can be turned on using `flutter config
--enable-multi-window` or by putting `enable-multi-window: true` in an
app's .pubspec, under the `flutter` section.
2. It adds a new
[`isMultiWindowEnabled`](https://github.com/flutter/flutter/pull/168697/files#diff-c8dbd5cd3103bc5be53c4ac5be8bdb9bf73e10cd5d8e4ac34e737fd1f8602d45R7-R11)
property to the framework.
4. The Material library can use this new property to determine whether
it should create a new window.
[Example](https://github.com/flutter/flutter/pull/168697/files#diff-2cbc1634ed6b61d61dfa090e7bfbbb7c60b74c8abc3a28df6f79eee691fd1b73).

## Limitations

### Tool and framework only

For now, these feature flags are available only to the Flutter tool and
Flutter framework. The flags are not automatically available to the
embedder or the engine.

For example, embedders need to configure their surfaces differently if
Impeller is enabled. This configuration must happen before the Dart
isolate is launched. As a result, the framework's feature flags is not a
viable solution for this scenario for now. For these kinds of scenarios,
we should continue to use platform-specific configuration like the
`AndroidManifest.xml` or `Info.plist` files.

This is a fixable limitation, we just need to invest in this plumbing :)

### Tree shaking

Feature flags are not designed to help tree shaking. For example, you
cannot conditionally import Dart code depending on the enabled feature
flags. Code that is feature flagged off will still be imported into
user's apps.
2025-07-15 00:02:16 +00:00
Pedro Massango
50d5f022c0
chore: unskip tests cases (#172031)
Issues have been solved, we can now have the tests back


## 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].
- [ ] 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.
2025-07-14 23:15:52 +00:00
Justin McCandless
9b93519698
Route transition duration (#171109)
We need a robust way to get the duration of a route transition in tests,
so that tests can remain independent of the type of route transition and
its duration.

With this PR, this will be the canonical way to pump until a page
transition has finished:

```dart
testWidgets('example', (WidgetTester tester) async {
  final TransitionDurationObserver observer = TransitionDurationObserver();

  await tester.pumpWidget(
    MaterialApp(
      navigatorObservers: <NavigatorObserver>[observer],
      onGenerateRoute: (RouteSettings settings) { ... },
    ),
  );

  expect(find.text('Page 1'), findsOneWidget);
  expect(find.text('Page 2'), findsNothing);

  // Pump through the whole transition.
  await tester.tap(find.text('Next'));
  await observer.pumpPastTransition(tester);

  expect(find.text('Page 1'), findsNothing);
  expect(find.text('Page 2'), findsOneWidget);

  // Or, pump through part of a transition with the duration.
  await tester.tap(find.text('Back'));
  await tester.pump(observer.transitionDuration ~/ 2);

  expect(find.text('Page 1'), findsOneWidget);
  expect(find.text('Page 2'), findsOneWidget);
});
```

This was spun out of https://github.com/flutter/flutter/pull/165832,
where updating the default route transition and its duration broke tests
in the framework, in customer tests, and in Google tests.

FYI @chrisbobbe

---------

Co-authored-by: Jing Shao <87506348+jingshao-code@users.noreply.github.com>
2025-07-14 22:49:04 +00:00
Ben Konyi
b40f19b7ed
[ Widget Preview ] Initial work to support reacting to IDE events (#172040)
Adds support for a subset of the DTD `Editor` service registered by IDEs
for use by the widget preview scaffold. Currently, this feature subset
includes support for listening for:

 - Source file selection events
 - Editor theme change events

This change does not introduce any new functionality that makes use of
these new DTD `Editor` events.
2025-07-14 19:35:59 +00:00
Ben Konyi
b95fd07576
[ Tool ] Downgrade and pin DDS to 5.0.3 (#172120)
The sole change in 5.0.4 can cause memory leaks in the VM. Pinning to
5.0.3 for the release cut.

See https://github.com/Dart-Code/Dart-Code/issues/4678 for details.
2025-07-14 18:10:07 +00:00
Mohellebi abdessalem
977901f19a
fix android studio lint about lambda function (#172063)
android studio is prompting :
<img width="618" height="219" alt="AS_01"
src="https://github.com/user-attachments/assets/d4c4c84d-f7d4-4a07-96a0-00d992c0d6d8"
/>

## 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] All existing and new tests are passing.
- [ ] 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.

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
2025-07-14 17:43:56 +00:00
Mouad Debbar
a930ec1a6c
Run hot_restart_web_ddc_library_bundle_test.dart on Mac/Windows (#171282)
Part of https://github.com/flutter/flutter/issues/171276
2025-07-14 14:30:24 +00:00
Jing Shao
c381cc52e5
Fix grammar: Change 'A' to 'An' before IOSSystemContextMenuItemData (#172019)
<!--
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 a grammar issue in the documentation comments for
`IOSSystemContextMenuItemData` subclasses in `text_input.dart`.

Follow-up to #170969.

*If you had to change anything in the [flutter/tests] repo, include a
link to the migration guide as per the [breaking change policy].*

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

<!-- 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-07-12 02:42:40 +00:00
zhongliugo
7015afcc41
Fix CheckedPopupMenuItem semantics to use menuItemCheckbox role with checked state (#171749)
Description
This PR fixes an accessibility issue where CheckedPopupMenuItem was not
properly announcing its checked state to screen readers.

Before

https://github.com/user-attachments/assets/b1785522-eea4-4fc3-9a9a-1872615838c0

After
Demo app: https://checked-0707.web.app/

https://github.com/user-attachments/assets/a8083c0b-11c8-4e93-bd71-842dfe5fa344

Issues Fixed
This PR fixes https://github.com/flutter/flutter/issues/171463. 

Breaking Changes
None.

## 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-07-11 22:04:23 +00:00