26201 Commits

Author SHA1 Message Date
Nicholas Shahan
43f3f920ad
[flutter_tool] Force UTF-8 character set for dev (#179419)
* Set the character set on the response for the index.html
when running the app with flutter tool.
* Add expectation to existing test that verifies the character 
set on the requested index.html reponse.

Fixes: https://github.com/dart-lang/sdk/issues/62090

---------

Co-authored-by: Ben Konyi <bkonyi@google.com>
2025-12-12 18:46:26 +00:00
hellohuanlin
87d15897b2
[ios][pv] accept/reject gesture based on hitTest (with new widget API) (#179659)
This is a follow up PR to [this original
PR](https://github.com/flutter/flutter/pull/177859).

The difference is the API - the original PR chooses Option 1 [in the
design
doc](https://docs.google.com/document/d/1ag4drAdJsR7y-rQZkqJWc6tOQ4qCbflQSGyoxsSC6MM/edit?tab=t.0),
while this PR chooses Option 3.

## Usage

To directly use flutter API, just pass in the policy when creating
UiKitView widget.

```
UiKitView(
  ...
  gestureBlockingPolicy: UiKitViewGestureBlockingPolicy)
  ...
)
```

For plugins, we need to update plugins to use this new API. 

```
WebView(
  ...
  gestureBlockingPolicy: UiKitViewGestureBlockingPolicy
) {
  return UiKitView(
    ..
    gestureBlockingPolicy: gestureBlockingPolicy
  )
}
```
For more information, refer to [the old
PR](https://github.com/flutter/flutter/pull/177859).



*List which issues are fixed by this PR. You must list at least one
issue. An issue is not required if the PR fixes something trivial like a
typo.*


https://github.com/flutter/flutter/issues/175099
https://github.com/flutter/flutter/issues/165787

*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].
- [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
2025-12-12 05:31:38 +00:00
Felipe Peter
4de6fcc369
Exit with code 1 when calling flutter build without arguments (#175900)
Resolves #5797

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

A whole bunch of tool tests failed locally even before the change, so
I'll have to see CI results to know if something actually broke due to
the change.
2025-12-12 02:32:33 +00:00
Youssef Shamass
927f9ba289
[ Tool ] Assemble: "Improper" validation error when dealing with base64 encoded dart-define value (#178737)
addressing a regression from #172510 that caused the assemble command to
fail in the validation phase when a dart-define was passed as a
base64-encoded value.

Example command: 
```
flutter --verbose assemble --no-version-check \
  --output=<build_output_path>/ \
  -dTargetPlatform=ios \
  -dTargetFile=lib/main.dart \
  -dBuildMode=release \
  -dConfiguration=Debug \
  -dIosArchs=arm64 \
  -dSdkRoot=<xcode_sdk_path>/iPhoneOS.sdk \
  -dSplitDebugInfo= \
  -dTreeShakeIcons=false \
  -dTrackWidgetCreation=true \
  -dDartObfuscation=false \
  -dAction=install \
  -dFrontendServerStarterPath= \
  --ExtraGenSnapshotOptions= \
  --DartDefines=ZW52PXFh \
  --ExtraFrontEndOptions= \
  -dSrcRoot=<project_root> \
  -dTargetDeviceOSVersion= \
  -dCodesignIdentity=<codesign_identity> \
  release_ios_bundle_flutter_assets
 ```

Partially addressing: https://github.com/flutter/flutter/issues/178452

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

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Ben Konyi <bkonyi@google.com>
2025-12-12 02:28:21 +00:00
auto-submit[bot]
f5b530930a
Reverts "[ Analysis ] Added initial implementation of the flutter_analyzer_plugin (#175679)" (#179766)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#175679
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jtmcdole
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Linux linux_unopt is now timing out in postsubmit
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: bkonyi
<!-- end_original_pr_author -->

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

<!-- start_revert_body -->
This change reverts the following previous change:
The `flutter_analyzer_plugin` implements rules previously enforced by
the `dev/bots/analyze.dart` check run on the CI, allowing for earlier
detection of custom lint violations before a change is uploaded for
review.

Currently, the plugin implements the following rules:

  - avoid_future_catch_error
  - no_double_clamp
  - no_stopwatches
  - protect_public_state_subtypes
  - render_box_intrinsics

Towards https://github.com/flutter/flutter/issues/175276
<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-12-12 00:13:27 +00:00
Ben Konyi
5ec8a97c7d
[ Analysis ] Added initial implementation of the flutter_analyzer_plugin (#175679)
The `flutter_analyzer_plugin` implements rules previously enforced by
the `dev/bots/analyze.dart` check run on the CI, allowing for earlier
detection of custom lint violations before a change is uploaded for
review.

Currently, the plugin implements the following rules:

  - avoid_future_catch_error
  - no_double_clamp
  - no_stopwatches
  - protect_public_state_subtypes
  - render_box_intrinsics

Towards https://github.com/flutter/flutter/issues/175276
2025-12-11 18:19:37 +00:00
zhongliugo
2a950efec4
Reland: Add framework-side hitTestBehavior support to Semantics (#178817) (#179352)
This is a reland of #178817, which was reverted in #179100 due to test
failures.

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

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

Fixes #149001
Original PR: #177570
Revert: #178744
2025-12-10 22:31:02 +00:00
yim
8fe76181e3
Fix the issue with pinned headers in nested SliverMainAxisGroup. (#179132)
Fixes: #178973

## 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
2025-12-10 21:11:40 +00:00
akashefrath
aaafeaf18d
added onUserInteractionIfError for form (#175515)
This PR adds a new `AutovalidateMode` value:  
`onUserInteractionIfError`.

This mode allows `Form` and `FormField` widgets to auto-validate **only
when a field already has an error and the user interacts with it
again**.

### Why
- Current modes (`disabled`, `always`, `onUserInteraction`, `onUnfocus`)
do not cover the case where developers want validation **only when
correcting an error**.
- This improves UX by reducing unnecessary validation calls while still
ensuring errors disappear as soon as the user fixes them.

### How
- Added `onUserInteractionIfError` to `AutovalidateMode`.  
- Updated Dartdoc with detailed description and example snippet.  
- Added new unit tests to validate behavior.  
- Verified no regressions in other modes (`always`, `onUnfocus`,
`onUserInteraction`).

### Example

```dart
TextFormField(
  autovalidateMode: AutovalidateMode.onUserInteractionIfError,
  validator: (value) => value!.isEmpty ? 'Required field' : null,
)
````

---

## Related Issues

Fixes #\<INSERT\_RELATED\_ISSUE\_NUMBER\_IF\_ANY>

---

## Tests

* Added widget tests to confirm that:

  * No validation occurs until a field has an error.
* Once an error exists, validation runs automatically on user
interaction.
  * Resetting the form clears errors correctly.
* Regression tests ensure that `always`, `onUserInteraction`, and
`onUnfocus` modes still behave correctly.

---

## Pre-launch / Reviewer Checklist

* [x] I have read the [[Contributor
Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)
* [x] I have read the \[Tree Hygiene] wiki page and followed its
guidance
* [x] I have read and followed the \[Flutter Style Guide]
* [x] I signed the \[CLA]
* [x] I added a new enum value with clear Dartdoc
(`onUserInteractionIfError`)
* [x] I added example code in the Dartdoc
* [x] I added new widget/unit tests for the new mode
* [x] All existing and new tests pass
* [x] I ran `flutter analyze` and fixed all issues
* [x] No breaking changes introduced (or marked accordingly)

---

## Breaking Change

* [x] Yes
* [x] No

---

## Screenshots / Demo (if applicable)

*(N/A — logic-only change)*

---

## Reviewer Notes

* The new mode reduces unnecessary validation until the user corrects an
error.
* All tests confirm correct behavior and no regressions in existing
modes.

---------

Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com>
2025-12-10 20:57:38 +00:00
Roman Laptev
9cc43f13a5
Manually roll characters (#179447)
Flutter pub roller does not update characters to 1.4.1.
#179495 

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

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

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

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-10 00:41:29 +00:00
Ahmed Mohamed Sameh
5266539cfb
Make sure that a CupertinoListSection doesn't crash in 0x0 environment (#179068)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoListSection widget.

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

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

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

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-10 00:23:57 +00:00
Ahmed Mohamed Sameh
41ff0598fe
Make sure that a CupertinoSegmentedControl doesn't crash in 0x0 envir… (#179544)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoSegmentedControl widget.
2025-12-10 00:22:36 +00:00
Ahmed Mohamed Sameh
4c24578e2b
Make sure that a CupertinoSlider doesn't crash in 0x0 environment (#179566)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoSlider
widget.
2025-12-10 00:22:36 +00:00
Ahmed Mohamed Sameh
6e611e04b7
Make sure that a CupertinoPageScaffold doesn't crash in 0x0 environment (#179245)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoPageScaffold widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-10 00:22:36 +00:00
Mohellebi abdessalem
15f944a9d6
Enhance documentation for LocalHistoryEntry class (#179223)
Fixes : #11660

## 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 `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

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

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

---------

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-09 22:14:21 +00:00
chunhtai
2e2d655be8
Relax assertion for adding semantics locale (#178140)
<!--
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
-->

instead forcing a contain: true, uses isCompatibleWith to prevent
implicit merge

## Pre-launch Checklist

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

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

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-12-09 20:46:18 +00:00
Ramon Farizel
8cdb466a8a
Fix Scrollbar drag behavior (#179199)
<!--
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
-->


Updates `_canHandleScrollGestures()` to check if there's an actual
scrollable range (`maxScrollExtent > minScrollExtent`) instead of only
checking if `maxScrollExtent > 0.0`.


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

## Pre-launch Checklist

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

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

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

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

---------

Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com>
2025-12-09 20:24:24 +00:00
Ahmed Mohamed Sameh
981a39f551
Make sure that a CupertinoActionSheetAction doesn't crash in 0x0 envi… (#178955)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoActionSheetAction widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-09 17:32:06 +00:00
Ahmed Mohamed Sameh
af7b52181e
Make sure that a CupertinoPickerDefaultSelectionOverlay doesn't crash… (#179351)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoPickerDefaultSelectionOverlay widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-09 17:30:04 +00:00
Ahmed Mohamed Sameh
6c7de50493
Make sure that a CupertinoExpansionTile doesn't crash in 0x0 environment (#178978)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoExpansionTile widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-09 17:28:05 +00:00
Harry Terkelsen
8b7834766f
Remove unused optional argument in _followDiagnosticableChain (#179525)
Fixes a small warning that just started showing up in Dart analysis.

Here's an example failure:
https://ci.chromium.org/ui/p/flutter/builders/try/Linux%20analyze/115908/overview

## 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
2025-12-09 00:59:30 +00:00
Kevin Moore
e85f1731a4
MatrixUtils.forceToPoint - simplify and optimize (#179546)
Avoid allocating 2 Vector4 instances
Also using Matrix4.zero vs identity which is a lot cheaper
2025-12-08 21:00:38 +00:00
Ahmed Mohamed Sameh
61033df43a
Make sure that a CupertinoListTile doesn't crash in 0x0 environment (#179109)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoListTile
widget.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-08 18:23:05 +00:00
Ahmed Mohamed Sameh
07e1cdd9ff
Make sure that a CupertinoFocusHalo doesn't crash in 0x0 environment (#178773)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoFocusHalo widget.

---------

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

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-08 18:16:20 +00:00
Matthew Kosarek
4000ce2b4e
Implementation of TestWindowingOwner for testing multi-window (#179355)
## What's new?
This pull request makes it so that multi window applications can be
tested via `testWidgets`. This PR implements the following:

- A `_TestWindowingOwner` that is used by the
`TestWidgetsFlutterBinding`
- A `_TestRegularWindowController` implementation
- A `_TestDialogWindowController` implementation
- A `_TestFlutterView` and `_TestDisplay` for use by the controllers
- Proper `isActivated` status across controllers
- Proper minimization, maximization, and fullscreen status
- Proper sizing (based on constraints)
- Using the new testing abilities in the multiple windows example app

I have purposefully not implemented tooltip windows yet, as they are
still awaiting an implementation in Win32 to be useful.

## Pre-launch Checklist

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

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:54:49 +00:00
Ahmed Mohamed Sameh
3a2b6821ee
Make sure that a CupertinoContextMenuAction doesn't crash in 0x0 envi… (#178721)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoContextMenuAction widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:53:02 +00:00
Ahmed Mohamed Sameh
0951f1e181
Make sure that a CupertinoRadio doesn't crash in 0x0 environment (#179378)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoRadio
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:53:01 +00:00
Ahmed Mohamed Sameh
a9d7ab92b6
Make sure that a CupertinoSearchTextField doesn't crash in 0x0 enviro… (#179487)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoSearchTextField widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:51:02 +00:00
Ahmed Mohamed Sameh
fe9a609404
Make sure that a CupertinoPicker doesn't crash in 0x0 environment (#179258)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoPicker
widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:47:49 +00:00
Ahmed Mohamed Sameh
2300260b28
Make sure that a CupertinoAlertDialog doesn't crash in 0x0 environment (#178858)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoAlertDialog widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:46:25 +00:00
Ahmed Mohamed Sameh
c4daa1f597
Make sure that a CupertinoListTileChevron doesn't crash in 0x0 enviro… (#179165)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoListTileChevron widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:46:25 +00:00
Ahmed Mohamed Sameh
a8577f996b
Make sure that CupertinoNavigationBar doesn't crash in 0x0 environment (#179235)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoNavigationBar widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:46:25 +00:00
Ahmed Mohamed Sameh
ebd263e392
Replace dropdown button with dropdown menu (#179095)
This is my attempt to handle #179094.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:46:25 +00:00
Ahmed Mohamed Sameh
362361484d
Make sure that a CupertinoCheckbox doesn't crash in 0x0 environment (#178630)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoCheckbox
widget.

Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:46:25 +00:00
Ahmed Mohamed Sameh
393c51fb46
Make sure that a CupertinoApp doesn't crash in 0x0 environment (#178610)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the CupertinoApp
widget.

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

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:45:03 +00:00
Ahmed Mohamed Sameh
b9424acf3c
Make sure that a CupertinoTimerPicker doesn't crash in 0x0 environment (#178857)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoTimerPicker widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:45:03 +00:00
Ahmed Mohamed Sameh
2a88fa0f23
Make sure that a CupertinoScrollbar doesn't crash in 0x0 environment (#179442)
This is my attempt to handle
https://github.com/flutter/flutter/issues/6537 for the
CupertinoScrollbar widget.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-12-05 23:45:03 +00:00
Bruno Leroux
2296b2b2a2
Update several comments related to theme normalization (#179457)
## Description

This PR updates some comments in various widgets to reflect the changes
related to Theme normalization.

## Related Issue

Related to https://github.com/flutter/flutter/issues/91772

## Tests

- Documentation only
2025-12-05 22:02:18 +00:00
Dev TtangKong
362b1de299
Reimplemented StretchingOverscrollIndicator with Simulation ported from Android 12. (#173849)
Fixed an issue #169659

This PR improves the StretchingOverscrollIndicator to better match
native Android behavior.

- Previously, the stretch effect worked well only for slow dragging, and
during fast flings it was absent or felt clipped.
- Implemented a Simulation-based animation that responds naturally to
both slow drags and high-velocity flings.
- The result closely resembles the native Android overscroll behavior
while maintaining Flutter's performance characteristics.

This change ensures that momentum-based gestures produce a more natural
and intuitive overscroll experience, especially for users accustomed to
native Android scroll views.

## Fling

[fling](https://github.com/user-attachments/assets/3944eef3-baaa-47df-82ca-9c49d4283fe4)

## Pull And Reduce
Also, a very similar animation is implemented when pulling as well.


[pull](https://github.com/user-attachments/assets/2a3025dc-0996-403d-b58b-d07f25487cda)

## 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>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-12-05 21:54:29 +00:00
Ben Konyi
c1f134a009
[ Widget Preview ] Add embedded Widget Inspector support (#178116)
This change allows for users to open an instance of the DevTools Widget
Inspector within a web view embedded in the widget previewer. This will
allow for developers to inspect their previews without requiring IDEs to
create a special debug session for the widget previewer application.

DWDS is also rolled as part of this change to add DDS and DevTools
support for the `web-server` device.

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

**Demo:**


https://github.com/user-attachments/assets/3e3a1098-0526-4c7f-8087-38fb84f28335
2025-12-05 01:03:54 +00:00
Ben Konyi
49b416cf72
Unpin package:dwds dependency (#179462)
Refactoring of code in `package:dwds` `26.2.1` changed execution
ordering enough for a race condition in the web benchmark harness to be
hit. This change updates the web benchmark harness to not rely on
waiting for console output from the spawned browser which can be missed.

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

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-05 00:59:02 +00:00
Bruno Leroux
aa4f528492
Add DropdownMenu.selectOnly (#179189)
## Description

This PR adds `DropdownMenu.selectOnly`. This property allows users to
get the DropdownMenu behave as a 'select' component.
It is meant as a future replacement for
`DropdownMenu.requestFocusOnTap`.

## Motivation

On mobile, a dropdown menu widget is usually used as a ‘select’ widget
because opening the keyboard for searching/filtering is not convenient.

In Flutter, this is currently implemented through
`DropdownMenu.requestFocusOnTap` which defaults to false on mobile and
true on desktop.
The `DropdownMenu.requestFocusOnTap` property is currently used to set
`FocusNode.canRequestFocus`. This leads do difficulties mainly related
to focus traversal:
- Keyboard traversal requires workarounds (for instance relying on the
trailing icon to be focusable).
- Keyboard shortcuts require also a workaround (currently relying on a
Focus widget in a Stack).
- The `DropdownMenu` decoration does not reflect the focus state.

This PR proposes a new property named `DropdownMenu.selectOnly` which
does not require `DropdownMenu.requestFocusOnTap` to be false to make
the `DropdownMenu` behave like a select widget.

With this property the `DropdownMenu`:
- Supports keyboard navigation on mobile and desktop.
- Has a correct decoration when focused.
- Does not rely on the trailing icon to be focusable (see
https://github.com/flutter/flutter/issues/174096).

In the future this property could be used as a replacement for
`DropdownMenu.requestFocusOnTap`. For the moment, for compatibility, it
does not replace `DropdownMenu.requestFocusOnTap`.

## Related Issue

Fixes [Allow DropdownMenu to be non-editable and focusable (select
control) ](https://github.com/flutter/flutter/issues/178009)
Also related to [Make DropdownMenu's trailing icon not focusable by
default](https://github.com/flutter/flutter/issues/174096) and
[[Material3] DropdownMenu Keyboard
Accessibility](https://github.com/flutter/flutter/issues/123797).


## Tests

- Adds 9 tests.
2025-12-04 13:41:36 +00:00
Bruno Leroux
0e11196c03
Update some BottomNavigationBar comments to reflect theme normalization (#179404)
## Description

This PR updates [BottomNavigationBar.selectedItemColor] and
[BottomNavigationBar.unselectedItemColor] documentation to reflect the
changes related to theme normalization.
It also fixes the [BottomNavigationBar.selectedItemColor] documentation
to mention the correct default values.

## Related Issue

Related to https://github.com/flutter/flutter/issues/91772

## Tests

- Documentation only
2025-12-04 08:03:24 +00:00