Loïc Sharma
2a866a5757
[Cupertino] Fix incorrect scaffold docs ( #164068 )
2025-03-12 23:30:17 +00:00
Ashish Beck
9af4d746df
Added semanticsIdentifier
to Text
Widgets ( #163843 )
...
This PR aims to add `semanticsIdentifier` to `Text` and some of its
internal objects to pass the semantics information for adding identifier
to the semantics nodes
From the issue filed at #163842 , the following is a description of the
problem.
The [semantics
identifier](https://api.flutter.dev/flutter/semantics/SemanticsData/identifier.html )
helps in uniquely identifying elements using UI automation tools like
Appium, UIAutomator and XCUITests by setting identifiers that the screen
readers cannot see but the said tools can. This is especially useful
when working with a multi-lingual or multi-tenant app, where the element
IDs need to be unique but the content can be different. The `Semantics`
widget already has support for declaring it. However, the `Text` and
`Text.rich` variants only support setting `semanticsLabel` without
explicitly setting the identifiers. The widgets themselves can be
wrapped with a `Semantics` widget but it still does not cater for a rich
text that can have multiple text spans, each containing unique lables
and identifiers, and optionally gesture detectors for handling links.
Consider the following UI for two different tenants:
<img width="229" alt="Image"
src="https://github.com/user-attachments/assets/e8a24588-d94d-42fc-ba6c-ce39959207ae "
/>
Here, both the tenants utilise different strings to convey the same
message. The structure of the message stays the same so the identifiers
help in unifying the element identification process across the tenant
apps in the automation tools without having to write another script for
every other tenant.
Without the identifiers, the automation scripts require a rewrite per
tenant to be able to successfully locate the element and even tap on the
hyperlink.
# With PR Changes
## Appium Views
For the given sample code,
<details><summary>Text.rich Sample</summary>
```dart
Text.rich(
TextSpan(
text: 'This text contains both identifier and label.',
semanticsLabel: 'Custom label',
semanticsIdentifier: 'Custom identifier',
style: customStyle1,
children: <TextSpan>[
TextSpan(
text: ' While this one contains only label',
semanticsLabel: 'Hello world',
style: customStyle2,
),
const TextSpan(
text: ' and this contains only identifier,',
semanticsIdentifier: 'Hello to the automation tool',
),
TextSpan(
text: ' this text contains neither identifier nor label.',
style: customStyle2,
),
],
),
),
```
</details>
we have the following results with and without the PR code changes:
### With Identifier

### Without Identifier Changes

## Semantics Tree Dump
The followings are the semantics tree dump for both the cases
<details><summary>With Identifier</summary>
```
I/flutter ( 8185): SemanticsNode#0
I/flutter ( 8185): │ Rect.fromLTRB(0.0, 0.0, 1080.0, 2154.0)
I/flutter ( 8185): │
I/flutter ( 8185): └─SemanticsNode#1
I/flutter ( 8185): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3) scaled by 2.8x
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): └─SemanticsNode#2
I/flutter ( 8185): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3)
I/flutter ( 8185): │ sortKey: OrdinalSortKey#9e46a(order: 0.0)
I/flutter ( 8185): │
I/flutter ( 8185): └─SemanticsNode#3
I/flutter ( 8185): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3)
I/flutter ( 8185): │ flags: scopesRoute
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#4
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 40.0, 376.7, 88.0)
I/flutter ( 8185): │ label: "Demonstration of automation tools support in Semantics
I/flutter ( 8185): │ for Text and RichText"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#5
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 104.0, 376.7, 204.0)
I/flutter ( 8185): │ label: "The identifier property in Semantics widget is used for
I/flutter ( 8185): │ UI testing with tools that work by querying the native
I/flutter ( 8185): │ accessibility, like UIAutomator, XCUITest, or Appium. It can be
I/flutter ( 8185): │ matched with CommonFinders.bySemanticsIdentifier."
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#6
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 220.0, 121.9, 244.0)
I/flutter ( 8185): │ label: "Text Example:"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#7
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 244.0, 376.7, 304.0)
I/flutter ( 8185): │ identifier: "This is a custom identifier that only the automation
I/flutter ( 8185): │ tools are able to see"
I/flutter ( 8185): │ label: "This is a custom label"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#8
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 320.0, 155.1, 344.0)
I/flutter ( 8185): │ label: "Text.rich Example:"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#9
I/flutter ( 8185): │ │ Rect.fromLTRB(16.0, 344.0, 376.7, 400.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#10
I/flutter ( 8185): │ │ Rect.fromLTRB(-4.0, -3.0, 280.0, 23.0)
I/flutter ( 8185): │ │ identifier: "Custom identifier"
I/flutter ( 8185): │ │ label: "Custom label"
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#06bc7(order: 0.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#11
I/flutter ( 8185): │ │ Rect.fromLTRB(-4.0, -1.0, 345.0, 42.0)
I/flutter ( 8185): │ │ label: "Hello world"
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#32a12(order: 1.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#12
I/flutter ( 8185): │ │ Rect.fromLTRB(130.0, 17.0, 348.0, 43.0)
I/flutter ( 8185): │ │ identifier: "Hello to the automation tool"
I/flutter ( 8185): │ │ label: " and this contains only identifier,"
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#49d25(order: 2.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ └─SemanticsNode#13
I/flutter ( 8185): │ Rect.fromLTRB(-4.0, 19.0, 351.0, 60.0)
I/flutter ( 8185): │ label: " this text contains neither identifier nor label."
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │ sortKey: OrdinalSortKey#f3624(order: 3.0)
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#14
I/flutter ( 8185): │ Rect.fromLTRB(16.0, 416.0, 181.0, 440.0)
I/flutter ( 8185): │ label: "Multi-tenant Example:"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#15
I/flutter ( 8185): │ │ Rect.fromLTRB(108.3, 440.0, 284.5, 480.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#16
I/flutter ( 8185): │ │ Rect.fromLTRB(-1.0, -3.0, 115.0, 23.0)
I/flutter ( 8185): │ │ identifier: "please_open"
I/flutter ( 8185): │ │ label: "Please open the "
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#ea831(order: 0.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#17
I/flutter ( 8185): │ │ Rect.fromLTRB(106.0, -3.0, 177.0, 23.0)
I/flutter ( 8185): │ │ identifier: "product_name"
I/flutter ( 8185): │ │ label: "product 1"
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#589fe(order: 1.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ ├─SemanticsNode#18
I/flutter ( 8185): │ │ Rect.fromLTRB(-4.0, -3.0, 177.0, 43.0)
I/flutter ( 8185): │ │ identifier: "to_use_app"
I/flutter ( 8185): │ │ label:
I/flutter ( 8185): │ │ "
I/flutter ( 8185): │ │ to use this app."
I/flutter ( 8185): │ │ textDirection: ltr
I/flutter ( 8185): │ │ sortKey: OrdinalSortKey#c2762(order: 2.0)
I/flutter ( 8185): │ │
I/flutter ( 8185): │ └─SemanticsNode#19
I/flutter ( 8185): │ Rect.fromLTRB(95.0, 17.0, 181.0, 43.0)
I/flutter ( 8185): │ actions: tap
I/flutter ( 8185): │ flags: isLink
I/flutter ( 8185): │ identifier: "learn_more_link"
I/flutter ( 8185): │ label: " Learn more"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │ sortKey: OrdinalSortKey#7d560(order: 3.0)
I/flutter ( 8185): │
I/flutter ( 8185): └─SemanticsNode#20
I/flutter ( 8185): │ Rect.fromLTRB(97.0, 496.0, 295.7, 536.0)
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#21
I/flutter ( 8185): │ Rect.fromLTRB(11.0, -3.0, 127.0, 23.0)
I/flutter ( 8185): │ identifier: "please_open"
I/flutter ( 8185): │ label: "Please open the "
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │ sortKey: OrdinalSortKey#7bb57(order: 0.0)
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#22
I/flutter ( 8185): │ Rect.fromLTRB(118.0, -3.0, 188.0, 23.0)
I/flutter ( 8185): │ identifier: "product_name"
I/flutter ( 8185): │ label: "product 2"
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │ sortKey: OrdinalSortKey#6c7c6(order: 1.0)
I/flutter ( 8185): │
I/flutter ( 8185): ├─SemanticsNode#23
I/flutter ( 8185): │ Rect.fromLTRB(-4.0, -3.0, 188.0, 43.0)
I/flutter ( 8185): │ identifier: "to_use_app"
I/flutter ( 8185): │ label:
I/flutter ( 8185): │ "
I/flutter ( 8185): │ to access this app."
I/flutter ( 8185): │ textDirection: ltr
I/flutter ( 8185): │ sortKey: OrdinalSortKey#1e8e7(order: 2.0)
I/flutter ( 8185): │
I/flutter ( 8185): └─SemanticsNode#24
I/flutter ( 8185): Rect.fromLTRB(117.0, 17.0, 203.0, 43.0)
I/flutter ( 8185): actions: tap
I/flutter ( 8185): flags: isLink
I/flutter ( 8185): identifier: "learn_more_link"
I/flutter ( 8185): label: " Find out more"
I/flutter ( 8185): textDirection: ltr
I/flutter ( 8185): sortKey: OrdinalSortKey#db7e6(order: 3.0)
```
</details>
<details><summary>Without Identifier Changes</summary>
```
I/flutter (18659): SemanticsNode#0
I/flutter (18659): │ Rect.fromLTRB(0.0, 0.0, 1080.0, 2154.0)
I/flutter (18659): │
I/flutter (18659): └─SemanticsNode#1
I/flutter (18659): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3) scaled by 2.8x
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): └─SemanticsNode#2
I/flutter (18659): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3)
I/flutter (18659): │ sortKey: OrdinalSortKey#102d4(order: 0.0)
I/flutter (18659): │
I/flutter (18659): └─SemanticsNode#3
I/flutter (18659): │ Rect.fromLTRB(0.0, 0.0, 392.7, 783.3)
I/flutter (18659): │ flags: scopesRoute
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#4
I/flutter (18659): │ Rect.fromLTRB(16.0, 40.0, 376.7, 88.0)
I/flutter (18659): │ label: "Demonstration of automation tools support in Semantics
I/flutter (18659): │ for Text and RichText"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#5
I/flutter (18659): │ Rect.fromLTRB(16.0, 104.0, 376.7, 204.0)
I/flutter (18659): │ label: "The identifier property in Semantics widget is used for
I/flutter (18659): │ UI testing with tools that work by querying the native
I/flutter (18659): │ accessibility, like UIAutomator, XCUITest, or Appium. It can be
I/flutter (18659): │ matched with CommonFinders.bySemanticsIdentifier."
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#6
I/flutter (18659): │ Rect.fromLTRB(16.0, 220.0, 121.9, 244.0)
I/flutter (18659): │ label: "Text Example:"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#7
I/flutter (18659): │ Rect.fromLTRB(16.0, 244.0, 376.7, 304.0)
I/flutter (18659): │ label: "This is a custom label"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#8
I/flutter (18659): │ Rect.fromLTRB(16.0, 320.0, 155.1, 344.0)
I/flutter (18659): │ label: "Text.rich Example:"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#9
I/flutter (18659): │ Rect.fromLTRB(16.0, 344.0, 376.7, 400.0)
I/flutter (18659): │ label: "Custom labelHello world and this contains only
I/flutter (18659): │ identifier, this text contains neither identifier nor label."
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#10
I/flutter (18659): │ Rect.fromLTRB(16.0, 416.0, 181.0, 440.0)
I/flutter (18659): │ label: "Multi-tenant Example:"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#11
I/flutter (18659): │ │ Rect.fromLTRB(108.3, 456.0, 284.5, 496.0)
I/flutter (18659): │ │
I/flutter (18659): │ ├─SemanticsNode#12
I/flutter (18659): │ │ Rect.fromLTRB(-4.0, -3.0, 177.0, 43.0)
I/flutter (18659): │ │ label:
I/flutter (18659): │ │ "Please open the product 1
I/flutter (18659): │ │ to use this app."
I/flutter (18659): │ │ textDirection: ltr
I/flutter (18659): │ │ sortKey: OrdinalSortKey#493fc(order: 0.0)
I/flutter (18659): │ │
I/flutter (18659): │ └─SemanticsNode#13
I/flutter (18659): │ Rect.fromLTRB(95.0, 17.0, 181.0, 43.0)
I/flutter (18659): │ actions: tap
I/flutter (18659): │ flags: isLink
I/flutter (18659): │ label: " Learn more"
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │ sortKey: OrdinalSortKey#587bf(order: 1.0)
I/flutter (18659): │
I/flutter (18659): └─SemanticsNode#14
I/flutter (18659): │ Rect.fromLTRB(88.9, 512.0, 303.8, 552.0)
I/flutter (18659): │
I/flutter (18659): ├─SemanticsNode#15
I/flutter (18659): │ Rect.fromLTRB(-4.0, -3.0, 196.0, 43.0)
I/flutter (18659): │ label:
I/flutter (18659): │ "Please open the product 2
I/flutter (18659): │ to access this app."
I/flutter (18659): │ textDirection: ltr
I/flutter (18659): │ sortKey: OrdinalSortKey#69083(order: 0.0)
I/flutter (18659): │
I/flutter (18659): └─SemanticsNode#16
I/flutter (18659): Rect.fromLTRB(117.0, 17.0, 219.0, 43.0)
I/flutter (18659): actions: tap
I/flutter (18659): flags: isLink
I/flutter (18659): label: " Find out more"
I/flutter (18659): textDirection: ltr
I/flutter (18659): sortKey: OrdinalSortKey#ed706(order: 1.0)
```
</details>
fixes https://github.com/flutter/flutter/issues/163842
---------
Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com>
2025-03-12 23:30:16 +00:00
René Kilczan
90d6f19d9a
Keyboard type update ( #164274 )
...
This fixes the bug #163013 by detecting changes of the `keyboardType`.
## 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].
<!-- 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-03-12 21:02:48 +00:00
Victoria Ashworth
03f1208721
Fix SwiftPM scheme migration to handle when there are no BuildActionEntries ( #164660 )
...
An Xcode scheme may or may not have `BuildActionEntries`. When migrating
to SwiftPM, if Flutter cannot find `BuildActionEntries` in the xcscheme,
append the `PreAction` to the end of the `BuildAction`.
Fixes https://github.com/flutter/flutter/issues/163086 .
## 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-03-12 20:53:50 +00:00
davidhicks980
76d7910e95
[widgets/raw_menu_anchor.dart] Fixed minor typos and applied style guide suggestions ( #162805 )
...
This PR fixes minor typos in the RawMenuAnchor docs.
I didn't include tests because the changes are minor.
## 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.
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-03-12 20:52:07 +00:00
Jason Simmons
a7a4d0bd2b
Write macOS universal gen_snapshot binaries to a separate output directory ( #164667 )
...
Also use the name "gen_snapshot" when building for Android targets
instead of appending a target architecture to the filename.
This allows flutter_tools to find the universal gen_snapshot binary when
using a locally built engine. Previously the tools would search
directories like "clang_x64" and find build outputs that may not match
the host architecture.
Moving the universal gen_snapshot binary to a separate directory avoids
conflicts with Dart's gen_snapshot binary, which is placed at the root
of the target output directory.
2025-03-12 19:02:55 +00:00
Jason Simmons
6316b48bca
Check for a null codec in MultiFrameImageStreamCompleter after calling _emitFrame ( #165009 )
...
_emitFrame invokes image listeners. A listener callback could remove all
of the MultiFrameImageStreamCompleter's listeners, resulting in a
_maybeDispose call that destroys the codec.
Fixes https://github.com/flutter/flutter/issues/164944
Fixes https://github.com/flutter/flutter/issues/164537
2025-03-12 17:17:30 +00:00
LongCatIsLooong
963f23e30e
computeDryLayout
access size bad (#164663 )
...
Asserts if `RenderBox.size` is accessed in `computeDryLayout`
Also changes `x is RenderObject` to `x != null` when x's static type is
`RenderObject?`.
## 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-03-12 16:15:06 +00:00
Srujan Gaddam
0bdb4d68b5
[flutter_tools] Call reassemble with DWDS 24.3.7 and update hot reload and restart analytics ( #165006 )
...
https://github.com/dart-lang/webdev/issues/2584
Reassemble was being called in DWDS in the injected client until
v24.3.7. Flutter tools should now instead be the one to call the service
extension. Now that it's in Flutter tools, we can also report how long
it took. Similarly, we should update analytics on various things like,
whether there was a reload rejection, how long the compile took, and
more.
Adds test to check that these analytics are being reported correctly.
## 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-03-12 15:16:49 +00:00
Taha Tesser
234b50aa53
Update Material 2 IconButton
padding documentation ( #164383 )
...
Fixes [Icon button with padding with wrong splash and highlight
position](https://github.com/flutter/flutter/issues/31194 )
### Description
This PR updates Material 2 `IconButton` padding documentation where
using disproportionate padding.
## 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].
- [ ] 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-03-12 09:51:35 +00:00
Kevin Moore
292496f80d
[tools, web] Make sure to copy the dump-info file if dump-info is used ( #165013 )
...
Also fixed the wording of the dump-info build flag
2025-03-11 22:52:06 +00:00
Reid Baker
463e751640
Convert AppLinkSettings to kotlin ( #164391 )
...
Fixes #162107
Commands that were helpful when working on this pr.
`dart dev/tools/bin/generate_gradle_lockfiles.dart
--no-gradle-generation` from flutter/flutter root.
`./gradlew test` from packages/flutter_tools/gradle.
`git add -- ":*.lockfile"` for adding only lockfile changes.
`../../bin/cache/dart-sdk/bin/dart bin/test_runner.dart test -t
android_java11_dependency_smoke_tests` from dev/devicelab
`ktlint --editorconfig=dev/bots/test/analyze-test-input/.editorconfig
--baseline=dev/bots/test/analyze-test-input/ktlint-baseline.xml
packages/flutter_tools/gradle/src/ --format` formatting kotlin code.
Need ktlint 1.5
## 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-03-11 17:00:17 +00:00
StanleyCocos
9d2dcea4ab
feat(FixedExtentScrollController): Add parent class properties to the constructor. ( #163190 )
...
This request is to add configurable parameters keepScrollOffset and
debugLabel to FixedExtentScrollController.
- Fixes https://github.com/flutter/flutter/issues/162972
## 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-03-11 16:33:03 +00:00
yakagami
7bf8837116
Clarify performacne of SingleTickerProviderStateMixin vs TickerProviderStateMixin ( #164870 )
...
Adds the following line to
[TickerProviderStateMixin](https://api.flutter.dev/flutter/widgets/TickerProviderStateMixin-mixin.html ):
>Using one [TickerProviderStateMixin] twice is more efficient than two
[SingleTickerProviderStateMixin]s.
This is based on a discussion on Flutter Discord with @chunhtai. From
what I understood, creating multiple `SingleTickerProviderStateMixin`s
is more expensive because you need two different state which is
relatively costly compared to having just one. Not sure if this line
should should be qualified like "Using one [TickerProviderStateMixin]
twice is *generally* more efficient than two
[SingleTickerProviderStateMixin]s" or similar.
This change should be reviewed for correctness as I don't actually
understand enough about the difference between
`TickerProviderStateMixin` and `SingleTickerProviderStateMixin`.
Closes #164869
<details>
<summary>
Example case where this was relevant (click)
</summary>
I was avoiding using `TickerProviderStateMixin` like so:
```dart
_animationController = AnimationController.unbounded(vsync: this)
..addListener(() {
_updateScale(_animationController.value);
});
//could have just set `vsync` to `this` if using `TickerProviderStateMixin`
WidgetsBinding.instance.addPostFrameCallback((_) {
_verticalAnimationController =
AnimationController.unbounded(vsync: _verticalController.position.context.vsync)
..addListener(() {
_verticalController.jumpTo(_verticalAnimationController.value);
});
_horizontalAnimationController =
AnimationController.unbounded(vsync: _horizontalController.position.context.vsync)
..addListener(() {
_horizontalController.jumpTo(_horizontalAnimationController.value);
});
});
```
Instead of just:
```dart
_animationController = AnimationController.unbounded(vsync: this)
..addListener(() {
_updateScale(_animationController.value);
});
_verticalAnimationController = AnimationController.unbounded(vsync: this)
..addListener(() {
_verticalController.jumpTo(_verticalAnimationController.value);
});
_horizontalAnimationController = AnimationController.unbounded(vsync: this)
..addListener(() {
_horizontalController.jumpTo(_horizontalAnimationController.value);
});
```
</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
2025-03-11 16:33:03 +00:00
Bernardo Ferrari
b35c6be8c9
Add withDurationAndBounce
to SpringDescription
( #164411 )
...
Part of https://github.com/flutter/flutter/issues/152587
### Description:
With `withDurationAndBounce` (we could also rename to `withDuration`),
the user only has to worry about a single attribute: the bounce (and
duration, but they would have to worry with duration anyway. If they
don't, there is a default value already). The standard
`SpringDescription` has 3 values, so it is way more abstract. This
should help a lot people to make beautiful spring animations using
Flutter.
<img width="838" alt="image"
src="https://github.com/user-attachments/assets/4d0dccc7-0f97-4a13-99a4-268228b87f08 "
/>
### Negative bounce:
I didn't enable bounce to be negative because the behavior is super
tricky. I don't know what formula Apple is using, but seems like it is
not public. There are many different formulas we can use, including the
one provided on the original issue, but then there is the risk of people
complaining it works differently than SwiftUI. I need to check if other
projects (react-spring, framer motion) support negative bounce, but
feels like this is something 99.9999% of people wouldn't expect or use,
so I think we are safe. I couldn't find a single usage of negative
bounce on Swift in all GitHub (without a duration, using code-search, vs
5k cases with positive values). Not even sure the todo is needed, but
won't hurt.
### Comparison
<details>
<summary>Dart vs Swift testing results</summary>
```dart
testWidgets('Spring Simulation Tests - Matching SwiftUI', (WidgetTester tester) async {
// Test cases matching the Swift code's ranges
List<({Duration duration, double bounce})> testCases = [
(duration: const Duration(milliseconds: 100), bounce: 0.0),
(duration: const Duration(milliseconds: 100), bounce: 0.3),
(duration: const Duration(milliseconds: 100), bounce: 0.8),
(duration: const Duration(milliseconds: 100), bounce: 1.0),
(duration: const Duration(milliseconds: 500), bounce: 0.0),
(duration: const Duration(milliseconds: 500), bounce: 0.3),
(duration: const Duration(milliseconds: 500), bounce: 0.8),
(duration: const Duration(milliseconds: 500), bounce: 1.0),
(duration: const Duration(milliseconds: 1000), bounce: 0.0),
(duration: const Duration(milliseconds: 1000), bounce: 0.3),
(duration: const Duration(milliseconds: 1000), bounce: 0.8),
(duration: const Duration(milliseconds: 1000), bounce: 1.0),
(duration: const Duration(milliseconds: 2000), bounce: 0.0),
(duration: const Duration(milliseconds: 2000), bounce: 0.3),
(duration: const Duration(milliseconds: 2000), bounce: 0.8),
(duration: const Duration(milliseconds: 2000), bounce: 1.0),
];
for (final testCase in testCases) {
SpringDescription springDesc = SpringDescription.withDurationAndBounce(
duration: testCase.duration,
bounce: testCase.bounce,
);
print(
'Duration: ${testCase.duration.inMilliseconds / 1000}, Bounce: ${testCase.bounce}, Mass: ${springDesc.mass}, Stiffness: ${springDesc.stiffness}, Damping: ${springDesc.damping}',
);
}
});
```
Output:
```
Duration: 0.1, Bounce: 0.0, Mass: 1.0, Stiffness: 3947.8417604357423, Damping: 125.66370614359171
Duration: 0.1, Bounce: 0.3, Mass: 1.0, Stiffness: 3947.8417604357423, Damping: 87.9645943005142
Duration: 0.1, Bounce: 0.8, Mass: 1.0, Stiffness: 3947.8417604357423, Damping: 25.132741228718338
Duration: 0.1, Bounce: 1.0, Mass: 1.0, Stiffness: 3947.8417604357423, Damping: 0.0
Duration: 0.5, Bounce: 0.0, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 25.132741228718345
Duration: 0.5, Bounce: 0.3, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 17.59291886010284
Duration: 0.5, Bounce: 0.8, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 5.026548245743668
Duration: 0.5, Bounce: 1.0, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 0.0
Duration: 1.0, Bounce: 0.0, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 12.566370614359172
Duration: 1.0, Bounce: 0.3, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 8.79645943005142
Duration: 1.0, Bounce: 0.8, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 2.513274122871834
Duration: 1.0, Bounce: 1.0, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 0.0
Duration: 2.0, Bounce: 0.0, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 6.283185307179586
Duration: 2.0, Bounce: 0.3, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 4.39822971502571
Duration: 2.0, Bounce: 0.8, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 1.256637061435917
Duration: 2.0, Bounce: 1.0, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 0.0
```
Swift:
```swift
import SwiftUI
import XCTest
class SpringParameterTests: XCTestCase {
func printSpringParameters(duration: Double, bounce: Double) {
let spring = Spring(duration: duration, bounce: bounce) // Let SwiftUI do its thing
print("Duration: \(duration), Bounce: \(bounce), Mass: \(spring.mass), Stiffness: \(spring.stiffness), Damping: \(spring.damping)")
}
func testParameterExtraction() {
// Test a range of durations and bounces
let durations: [Double] = [0.1, 0.5, 1.0, 2.0]
let bounces: [Double] = [0.0, 0.3, 0.8, 1.0]
for duration in durations {
for bounce in bounces {
printSpringParameters(duration: duration, bounce: bounce)
}
}
}
}
```
Output:
```
Duration: 0.1, Bounce: 0.0, Mass: 1.0, Stiffness: 3947.8417604357433, Damping: 125.66370614359172
Duration: 0.1, Bounce: 0.3, Mass: 1.0, Stiffness: 3947.841760435743, Damping: 87.96459430051421
Duration: 0.1, Bounce: 0.8, Mass: 1.0, Stiffness: 3947.8417604357423, Damping: 25.132741228718338
Duration: 0.1, Bounce: 1.0, Mass: 1.0, Stiffness: 3947.8417604357433, Damping: 0.0
Duration: 0.5, Bounce: 0.0, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 25.132741228718345
Duration: 0.5, Bounce: 0.3, Mass: 1.0, Stiffness: 157.9136704174297, Damping: 17.59291886010284
Duration: 0.5, Bounce: 0.8, Mass: 1.0, Stiffness: 157.9136704174297, Damping: 5.026548245743668
Duration: 0.5, Bounce: 1.0, Mass: 1.0, Stiffness: 157.91367041742973, Damping: 0.0
Duration: 1.0, Bounce: 0.0, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 12.566370614359172
Duration: 1.0, Bounce: 0.3, Mass: 1.0, Stiffness: 39.478417604357425, Damping: 8.79645943005142
Duration: 1.0, Bounce: 0.8, Mass: 1.0, Stiffness: 39.478417604357425, Damping: 2.513274122871834
Duration: 1.0, Bounce: 1.0, Mass: 1.0, Stiffness: 39.47841760435743, Damping: 0.0
Duration: 2.0, Bounce: 0.0, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 6.283185307179586
Duration: 2.0, Bounce: 0.3, Mass: 1.0, Stiffness: 9.869604401089356, Damping: 4.39822971502571
Duration: 2.0, Bounce: 0.8, Mass: 1.0, Stiffness: 9.869604401089356, Damping: 1.256637061435917
Duration: 2.0, Bounce: 1.0, Mass: 1.0, Stiffness: 9.869604401089358, Damping: 0.0
```
There are minor differences which should be rounding errors.
</details>
2025-03-11 07:44:29 +00:00
Srivats Venkataraman
d452d04a07
#163840 - CupertinoButton cursor doesn't change to clickable on desktop ( #164196 )
...
<!--
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 addresses Issue number: 163840, where when hovering over a
Cupertino button the mouse cursor wouldn't switch to clickable and there
wasn't any option to configure it.
Adds Mouse cursor to CupertinoButton, CupertinoButton.Filled and
CupertinoButton.Tinted
Fixes https://github.com/flutter/flutter/issues/163840
Part of https://github.com/flutter/flutter/issues/58192
Demo of the changes
https://github.com/user-attachments/assets/2e5d874e-cdfe-44bf-9710-bbbde99be3f7
Code snippet showing new behavior
```dart
import 'package:flutter/cupertino.dart';
void main() => runApp(
// const Center(child: Text('Hello, world!', key: Key('title'), textDirection: TextDirection.ltr)),
CupertinoApp(
theme: const CupertinoThemeData(
brightness: Brightness.light,
),
home: Center(
child: Column(
spacing: 5.0,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
CupertinoButton(
onPressed: (){},
child: const Text('Default Cursor'),
),
CupertinoButton(
onPressed: (){},
mouseCursor: SystemMouseCursors.grab,
child: const Text('Custom Cursor'),
),
CupertinoButton.filled(
onPressed: (){},
mouseCursor: SystemMouseCursors.copy,
child: const Text('Custom Cursor 2'),
),
CupertinoButton.tinted(
onPressed: (){},
mouseCursor: SystemMouseCursors.help,
child: const Text('Custom Cursor 2'),
),
],
)
),
),
);
```
*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.*
*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.
- [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
---------
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Tirth <pateltirth454@gmail.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
2025-03-11 02:12:05 +00:00
Victoria Ashworth
84b38b8dfc
Make LLDB check a warning instead of a failure ( #164828 )
...
We added LLDB file in https://github.com/flutter/flutter/pull/164344 .
This adjusts it so if the LLDB file is missing it gives a warning rather
than an error that fails the build.
## 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-03-10 23:27:53 +00:00
Victor Sanni
cd433d4d36
Align nav bar bottom transition with large title animation ( #162097 )
...
Makes the bottom widget sync up with the large title in hero transitions
between nav bars.
## Before
https://github.com/user-attachments/assets/3f8c67c3-20c2-4751-b29b-7db8d3f3409f
## After
https://github.com/user-attachments/assets/5e4c966f-1818-4851-87a1-0bf613ebda0b
## Native searchable-to-searchable:
https://github.com/user-attachments/assets/56cf93e0-e529-4ca8-9f49-4e40f710e5ed
## Flutter searchable-to-searchable:
https://github.com/user-attachments/assets/a98d9f53-8d4b-44cf-afa9-541751c21172
Fixes [CupertinoSliverNavigationBar/CupertinoNavigationBar bottom is not
displayed during nav bar flying hero
transitions](https://github.com/flutter/flutter/issues/162203 )
## 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].
<!-- 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-03-10 19:36:04 +00:00
Sarbagya Dhaubanjar
6d6d7914f9
Added calendar delegate to support custom calendar systems ( #161874 )
...
Added `CalendarDelegate` class that supports plugging in custom calendar
logics other than Gregorian Calendar System.
Here is an example implementation for Nepali(Bikram Sambat) Calendar
System:
https://github.com/sarbagyastha/nepali_date_picker/blob/m3/lib/src/nepali_calendar_delegate.dart
Demo using the `NepaliDatePickerDelegate`:
https://date.sarbagyastha.com.np/
Fixes https://github.com/flutter/flutter/issues/77531 ,
https://github.com/flutter/flutter/issues/161873
## 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>
2025-03-08 02:41:17 +00:00
Tong Mu
83781ae65c
RoundSuperellipse algorithm v3: Ultrawideband heuristic formula ( #164755 )
...
This PR revises the algorithm for RoundSuperellipses, replacing the
current "max ratio" approximation with an algorithm that works for
ratios from 2.0 to infinity.
The previous "max ratio" approximation, which replaces the middle of
edges with straight lines when the ratio is above 2.3, turns out to
produce results too close to classic RRects. After reexamining the
shapes and more calculation, I discovered that the max-ratio
approximation is flawed. Even squircles with with really high ratios
(~100) have a significant part of the edges that must not be
approximated by straight lines.
The new version is much closer to native.
### Comparison
Native: (Notice the long wedgy gap at the end of curves)
<img
src="https://github.com/user-attachments/assets/61b60191-7d45-4c49-9e09-b0422243cd8c "
width="400"/>
Before PR: (Notice the short wedgy gap at the end of curves)
<img
src="https://github.com/user-attachments/assets/15ea374b-4b16-4187-aaa4-94f432fbb61e "
width="400"/>
After PR:
<img
src="https://github.com/user-attachments/assets/973ef4d1-7c26-44a9-b45e-10d109d5618b "
width="400"/>
Another example (after PR). Even though the rectangular RSE has ratios
of around 4, there are still curvature near the middle section of edges,
which can be identified with the help of antialias pixels.
<img width="838" alt="image"
src="https://github.com/user-attachments/assets/5078d098-c582-48a8-81e5-615909def675 "
/>
### Details
I found that `n` has really good linearity towards larger ratios.
<img width="844" alt="image"
src="https://github.com/user-attachments/assets/73e99e45-a0f0-450b-8e2b-f6fd97082958 "
/>
I also found a good candidate for the precomputed unknown (called
`k_xJ`), which has a smooth curve at the beginning and almost straight
line towards larger `n`, removing the need to cap the scope of
application of the formula.
<img width="1203" alt="image"
src="https://github.com/user-attachments/assets/67664898-2dbd-4f00-a9ba-d76030cf3742 "
/>
The algorithm for paths are also updated in a similar way and
approximated the Bezier factors with heuristic formulae for bigger `n`s.
I've also verified that the path deviates from the geometry by no more
than 0.01% over the range of n [15, 100]
Theoretically removing "stretch" should simplify the algorithms.
Unfortunately I had to spend more lines to process cases of zero radii,
which were conveniently handled by stretches.
## 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-03-08 02:39:09 +00:00
Elliott Brooks
b7bea22ab8
[Widget Inspector] Handle null exceptions calling renderObject
( #163642 )
...
Fixes https://github.com/flutter/devtools/issues/8905
Based on the stacktrace in
https://github.com/flutter/devtools/issues/8905 :
* This call to `renderObject` can throw a null-exception:
39b4951f8f/packages/flutter/lib/src/widgets/framework.dart (L3745)
* That exception is thrown here:
39b4951f8f/packages/flutter/lib/src/widgets/framework.dart (L6534)
I've been unable to figure out a way to get into a state that reproduces
this. Instead, this PR simply handles the exception and returns `null`
(because we already gracefully handle the case where the `renderObject`
is `null`.
2025-03-07 21:21:55 +00:00
chunhtai
e0b9869468
Adds aria-controls support ( #163894 )
...
<!--
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
-->
adding a new property in semantics properties called
controlsVisibilityOfNodes, where developer can assign
SemanticsProperties.identifier of other nodes to indicates which nodes'
visibilities this node controls
fixes https://github.com/flutter/flutter/issues/162125
## 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-03-06 22:41:09 +00:00
Victoria Ashworth
eb07c51230
Add lldb init file ( #164344 )
...
Adds an .lldbinit file to iOS app xcscheme.
Adding to scheme files can be error prone since a developer may be using
custom schemes (flavors). If we can't add it to the scheme, we print an
error without failing.
Since it is part of the scheme, it will be added to the project and will
be used on every run regardless of the device type/version. The Dart
side handles limiting to specific devices. If needed, we can alter the
.lldbinit file during `flutter assemble` to rewrite it since it doesn't
read the file until launch time (therefore it can be changed during
build time).
During `flutter assemble`, if the project doesn't have an LLDB Init File
set for any schemes, it'll throw an error if running in debug mode with
an iOS 18.4+ device.
## 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 `///`).
- [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-03-06 21:21:52 +00:00
Jason Simmons
8876bccf3a
Use separate artifacts for arm64 and x64 versions of gen_snapshot on Apple platforms ( #164419 )
...
Fixes https://github.com/flutter/flutter/issues/156175
2025-03-06 20:14:08 +00:00
flutter-pub-roller-bot
97f7c50989
Roll pub packages ( #164713 )
...
This PR was generated by `flutter update-packages --force-upgrade`.
2025-03-06 15:36:24 +00:00
Mairramer
40e4c5eed1
Adds animateToItem to the CarouselController ( #162694 )
...
Closes #161368
This PR adds the `animateToItem` method to the `CarouselController`,
enabling smooth, index-based navigation for carousels with fixed or
dynamically-sized items (via `flexWeights`).
https://github.com/user-attachments/assets/c0fe375a-5495-4d56-8b2d-0bd6d0bd0639
## 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.
- [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-03-05 21:27:21 +00:00
Kishan Rathore
b44f717d57
Fix: Update CupertinoSheetRoute transition rounded corner ( #163700 )
...
Fix: Update CupertinoSheetRoute transition rounded corner
fixes : #163334
## 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-03-05 20:49:55 +00:00
Victor Sanni
57cddce924
Fix race condition causing crash when interacting with an animating scrollable ( #164392 )
...
Fix https://github.com/flutter/flutter/issues/163297
Fix https://github.com/flutter/flutter/issues/14452
Partial patch: https://github.com/flutter/flutter/pull/37267
## 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.
- [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-03-05 17:41:20 +00:00
Srujan Gaddam
86e4c12a06
Use dwds 24.3.6 and pass uri for the reload scripts path to FrontendServerDdcLibraryBundleProvider ( #164582 )
...
The path to reload scripts JSON was being added to the global window
before. It should instead be passed to the provider on setup. In order
to do this, the baseUri calculation is moved into the WebAssetServer.
This is safe because Flutter tools was calculating it immediately
after creating the server anyways.
https://github.com/dart-lang/webdev/issues/2584
Existing hot reload tests should test this behavior.
## 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.
- [ ] All existing and new tests are passing.
2025-03-05 17:29:06 +00:00
ash-google
b771b39813
Enforce minSdk constraint for Android Flutter ( #164251 )
...
This commit adds validation for the Android SDK version within the
existing dependency version checker. It introduces a warning when the
SDK version is below a predefined threshold. The validation checks for
the `minSdk` property in the `android` block of the app's `build.gradle`
file. It will warn users if their `minSdk` version is out of Flutter's
supported
range and guide them on how to fix it.
Fixes https://github.com/flutter/flutter/issues/134570
<!--
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.
<!-- 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-03-05 02:40:12 +00:00
Tong Mu
0357b45337
Add clipRSuperellipse
, and use them for dialogs ( #161111 )
...
This PR makes Flutter support `clipRSuperellipse`, and apply it to
`CupertinoAlertDialog`.
Hit tests related to RSuperellipse are performed based on its bounding
box, since the computation is too complicated and pixel perfect hit test
is not needed practically.
Native:
<img
src="https://github.com/user-attachments/assets/8f9b472a-e624-4eef-9cea-e81b80f32b86 "
width="400"/>
Native vs before: (The two screenshots are stacked and offset by (1, 1)
pixels. See the bottom right corner for comparison.)
<img
src="https://github.com/user-attachments/assets/ffaf62fc-a82f-4c7a-9ff1-52374f4f2a67 "
width="400"/>
Native vs after:
<img
src="https://github.com/user-attachments/assets/3dfde2b0-bcc6-492a-8d97-ecabdf97f6f0 "
width="400"/>
After only:
<img
src="https://github.com/user-attachments/assets/32b2a665-a0da-498f-acdb-598553940964 "
width="400"/>
## 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-03-05 02:06:12 +00:00
Kamil Szczęk
612d39e0e6
feat(Tooltip): pass the default text style down the tree ( #163259 )
...
Modify the tooltip's DefaultTextStyle to use the actual default text
style picked to fit the current theme and platform instead of hardcoding
the bodyMedium text style.
Closes : #163255
## 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.
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-03-04 22:15:19 +00:00
Loïc Sharma
7d8c78ce20
[A11y] Add radio group role ( #164154 )
...
This adds a new "radio group" accessibility role to `dart:ui` and the
Flutter web engine.
This does not update existing widgets to use this new role. Currently,
users must manually add a `Semantics` widget to use this accessibility
role. See the example app below.
Part of: https://github.com/flutter/flutter/issues/162093
## Example app
<details>
<summary>Example app that uses the radio group role...</summary>
```dart
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/semantics.dart';
void main() {
runApp(const RadioExampleApp());
SemanticsBinding.instance.ensureSemantics();
}
class RadioExampleApp extends StatelessWidget {
const RadioExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Radio Sample')),
body: const Center(child: RadioExample()),
),
);
}
}
class RadioExample extends StatefulWidget {
const RadioExample({super.key});
@override
State<RadioExample> createState() => _RadioExampleState();
}
class _RadioExampleState extends State<RadioExample> {
int _groupValue = 0;
@override
Widget build(BuildContext context) {
return Semantics(
label: 'Radio group',
role: SemanticsRole.radioGroup,
explicitChildNodes: true,
child: Column(
children: <Widget>[
ListTile(
title: const Text('Foo'),
leading: Radio<int>(
value: 0,
groupValue: _groupValue,
onChanged: (int? value) => setState(() => _groupValue = value ?? 0),
),
),
ListTile(
title: const Text('Bar'),
leading: Radio<int>(
value: 1,
groupValue: _groupValue,
onChanged: (int? value) => setState(() => _groupValue = value ?? 0),
),
),
],
),
);
}
}
```
</details>
<details>
<summary>Accessibility tree...</summary>
```
SemanticsNode#0
│ Rect.fromLTRB(0.0, 0.0, 1200.0, 924.0)
│
└─SemanticsNode#1
│ Rect.fromLTRB(0.0, 0.0, 1200.0, 924.0)
│ textDirection: ltr
│
└─SemanticsNode#2
│ Rect.fromLTRB(0.0, 0.0, 1200.0, 924.0)
│ sortKey: OrdinalSortKey#83a1d(order: 0.0)
│
└─SemanticsNode#3
│ Rect.fromLTRB(0.0, 0.0, 1200.0, 924.0)
│ flags: scopesRoute
│
├─SemanticsNode#9
│ │ Rect.fromLTRB(0.0, 0.0, 1200.0, 56.0)
│ │
│ └─SemanticsNode#10
│ Rect.fromLTRB(532.6, 14.0, 667.4, 42.0)
│ flags: isHeader
│ label: "Radio Sample"
│ textDirection: ltr
│
└─SemanticsNode#4
│ Rect.fromLTRB(0.0, 56.0, 1200.0, 924.0)
│ label: "Radio group"
│ textDirection: ltr
│ role: radioGroup
│
├─SemanticsNode#5
│ │ Rect.fromLTRB(0.0, 0.0, 1200.0, 48.0)
│ │ flags: hasSelectedState, hasEnabledState, isEnabled
│ │ label: "Foo"
│ │ textDirection: ltr
│ │
│ └─SemanticsNode#6
│ Rect.fromLTRB(16.0, 8.0, 48.0, 40.0)
│ actions: focus, tap
│ flags: hasCheckedState, hasSelectedState, hasEnabledState,
│ isEnabled, isInMutuallyExclusiveGroup, isFocusable
│
└─SemanticsNode#7
│ Rect.fromLTRB(0.0, 48.0, 1200.0, 96.0)
│ flags: hasSelectedState, hasEnabledState, isEnabled
│ label: "Bar"
│ textDirection: ltr
│
└─SemanticsNode#8
Rect.fromLTRB(16.0, 8.0, 48.0, 40.0)
actions: focus, tap
flags: hasCheckedState, isChecked, hasSelectedState, isSelected,
hasEnabledState, isEnabled, isInMutuallyExclusiveGroup,
isFocusable
```
</details>
<details>
<summary>HTML generated by Flutter web...</summary>
```html
<html>
...
<body flt-embedding="full-page" flt-renderer="canvaskit" flt-build-mode="debug" spellcheck="false" style="...">
...
<flt-announcement-host>
<flt-announcement-polite aria-live="polite" style="...">
<flt-announcement-assertive aria-live="assertive" style="...">
<flutter-view style="...">
<flt-glass-pane></flt-glass-pane>
<flt-text-editing-host></flt-text-editing-host>
<flt-semantics-host style="...">
<flt-semantics id="flt-semantic-node-0" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-1" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-2" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-3" role="dialog" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-9" style="...">
<flt-semantics-container style="...">
<h2 id="flt-semantic-node-10" tabindex="-1" style="...">
Radio Sample</h2>
</flt-semantics-container>
</flt-semantics>
<flt-semantics id="flt-semantic-node-4" role="radiogroup" aria-label="Radio group"
style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-5" role="group" aria-label="Foo"
aria-selected="false" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-6" tabindex="0" flt-tappable="" role="radio"
aria-checked="false" style="...">
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
<flt-semantics id="flt-semantic-node-7" role="group" aria-label="Bar"
aria-selected="false" style="...">
<flt-semantics-container style="...">
<flt-semantics id="flt-semantic-node-8" tabindex="0" flt-tappable="" role="radio"
aria-checked="true" style="...">
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-host>
</body>
</html>
```
</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
2025-03-03 21:42:08 +00:00
Reid Baker
7ea4ac53f2
Update ktlint to 1.5 ( #164409 )
...
Fixes https://github.com/flutter/flutter/issues/164408
Ready for review
~I think this pr is blocked by
https://github.com/flutter/cocoon/pull/4275 uploading a new artifact.~
then someone with cipd-writers access running `cipd set-ref
flutter/ktlint/linux-amd64 -ref version_1_5_0 -version <TBD ID>`
where id comes from
https://chrome-infra-packages.appspot.com/p/flutter/ktlint/linux-amd64
To check if I had writer permissions I ran `cipd acl-check
flutter/android/sdk/all/ -writer`
To request permissions use go/flutter-cipd-write (googler only)
Successful run of linux analyze
https://ci.chromium.org/ui/p/flutter/builders/try/Linux%20analyze/96415/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.
2025-03-03 19:39:23 +00:00
LongCatIsLooong
ac7118832d
Add a isSystemTextScaler
matcher ( #160120 )
...
This is for https://github.com/flutter/flutter/pull/159999 . That PR
breaks registered tests so a new matcher is added for soft transition &
making it slightly easier to write tests that verify nothing is
shadowing the system text scaler in the widget tree.
If this approach sounds plausible & gets merged, I'm going to:
1. remake the breaking change announcement
2. update the migration guide with the new matcher,
3. migrate the registered tests and mark #159999 as ready for review.
## 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-03-03 19:37:07 +00:00
Matan Lurey
71d50a1616
Start using bin/cache/engine.{stamp|realm}
instead of bin/internal/engine.{realm|version}
. ( #164352 )
...
Towards https://github.com/flutter/flutter/issues/164315 .
See also:
https://github.com/flutter/flutter/blob/master/docs/tool/Engine-artifacts.md .
There are more usages in `flutter/flutter`, but some will require more
specialized review (i.e. from release folks, or the Dart SDK team), so
I'll split those off.
~~Requires https://github.com/flutter/flutter/pull/164317 to merge
first.~~ ✅
2025-03-02 00:54:33 +00:00
yim
246d6c6834
Make pressing and moving on CupertinoButton closer to native behavior. ( #161731 )
...
Fixes : #91581
This PR adds an `onTapMove` event to `TapGestureRecognizer`, and then
`CupertinoButton` uses this event to implement the behavior of the
native iOS `UIButton` (as shown in the issue). It is worth noting that
this PR slightly changes the way `CupertinoButton`'s `onPressed` is
triggered. Specifically, it changes from being triggered by
`TapGestureRecognizer`'s `onTap` to checking if the event position is
still above the button in `TapGestureRecognizer`'s `onTapUp`.
Additionally, it removes the previous behavior where the gesture was
canceled if moved beyond `kScaleSlop` (18 logical pixels). Overall,
previously, `onPressed` could not be triggered if the button was pressed
and then moved more than 18 pixels. This PR adjusts it so that
`onPressed` cannot be triggered if the button is pressed and then moved
outside the button.
## 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-02-28 23:57:35 +00:00
Kishan Rathore
1bafd3e0d6
Fix: Update DelegatedTransition animation parameter correctly ( #163853 )
...
Fix: Update DelegatedTransition animation parameter correctly
fixes : #163389
## 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-02-28 21:05:26 +00:00
Hannes Hultergård
6958d086bc
Add action for configuring default action of EditableText.onTapUpOutside ( #162575 )
...
This PR adds an `Action` for configuring a default action of
`EditableText.onTapUpOutside`. This is the equivalent to what
https://github.com/flutter/flutter/pull/150125 did for
`EditableText.onTapOutside`.
Fixes https://github.com/flutter/flutter/issues/162212
## 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-02-28 19:01:33 +00:00
Mikhail Novoseltsev
b8902e6a17
[tool] Allow using archiveName in android bundle build ( #162390 )
...
fixes #126971
Also, for some reason, fixes #147261 , which shouldn't have been ever
broken since this case tested here:
b007899d3a/packages/flutter_tools/test/general.shard/android/gradle_find_bundle_test.dart (L153-L173)
<!--
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
-->
Key change here is replacing the optimistic approach of guessing the
filename based on buildInfo parameters with the actual discovery of
built artifacts on the filesystem. This change is needed because there
is no way the build can determine the archiveName from Gradle, which
differentiates this part from other parameters such as buildType and
flavor. Flutter build contains information about them, but not about the
base name.
<img width="673" alt="Screenshot 2025-01-29 at 22 42 29"
src="https://github.com/user-attachments/assets/ab530a00-031f-48e2-962c-ed010b4009c9 "
/>
## 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
---------
Co-authored-by: Reid Baker <hamilton.reid.baker@gmail.com>
Co-authored-by: Gray Mackall <34871572+gmackall@users.noreply.github.com>
Co-authored-by: Reid Baker <reidbaker@google.com>
2025-02-28 14:57:20 +00:00
Jonas Uekötter
556ae54358
Fix incorrectly checking for invalid environment variables in the tool ( #164101 )
...
<!--
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 removes a check that looks for the use of Flutter version
related Dart define keys in the environment variables (not Dart defines)
of the user of the Flutter tool. We don't need to check the environment
variables, we only need to check the user defined Dart defines.
Here's how it currently works:
1. User builds a Flutter app via tool
2. tool checks environment variables for Flutter version related Dart
define keys and throws if it finds and (_and_)
3. tool checks list of user defined Dart defines for Flutter version
related Dart define keys and throws if it finds any
This PR removes the check in step 2, since step 3 is what we actually
care about.
The `FLUTTER_GIT_URL` environment variable is set on forks and the Dart
define is used to make that information available to applications at
runtime. However, environment variables don't propagate to be Dart
defines, thus the above mentioned check is not needed.
*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.*
Fixes #164093
*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.
- [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-02-28 14:48:15 +00:00
Robert Ancell
887d5dd9c2
Fix flutter doctor usage of eglinfo in failure cases. ( #164334 )
...
Ignore return value from eglinfo - it doesn't indicate failure.
Discovered when using an X11 system where Wayland is not available. It
returns 1 in this case, but the output is still valid. Confirmed by
looking at the eglinfo source - we should parse the output regardless of
what it returns.
Catch exception correctly when eglinfo is not installed.
Fixes for https://github.com/flutter/flutter/pull/163980
2025-02-28 13:07:55 +00:00
Sigurd Meldgaard
45b21ec3bb
Refactor writing of package config in tests ( #163734 )
...
Seems like each test had its own way of doing this.
Extracted from https://github.com/flutter/flutter/pull/160443
2025-02-28 08:51:59 +00:00
yim
4da1dec288
Fixed the issue that Slider's secondaryTrackValue is not updated. ( #163996 )
...
Fixes : #163971
## 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].
<!-- 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: Taha Tesser <tessertaha@gmail.com>
2025-02-28 05:54:20 +00:00
yim
25a5b2b6cb
Drag handles only need to be tested on mobile platforms. ( #163723 )
...
This PR modifies a test that aims to verify whether the toolbar remains
visible when dragging the end handle. However, on desktop platforms,
there is no end handle.

<img
src="https://github.com/user-attachments/assets/25575f7c-4856-4954-9c59-9cf2e009d63b "
width="300">
This issue was initially introduced here:
https://github.com/flutter/flutter/pull/161731#pullrequestreview-2574978920 .
## 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].
<!-- 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-02-28 02:30:37 +00:00
Matan Lurey
a19509c6c3
Document how engine.version
(is/will be) computed ( #164335 )
...
Towards https://github.com/flutter/flutter/issues/163896 .
2025-02-27 22:48:48 +00:00
flutter-pub-roller-bot
6a073ce605
Roll pub packages ( #164316 )
...
This PR was generated by `flutter update-packages --force-upgrade`.
2025-02-27 19:38:00 +00:00
Jay
25f2df623d
Fix korean cupertino datepicker datetime order ( #163850 )
...
Currently, in the Korean locale (`ko`), the `CupertinoDatePicker`
displays the time in the order of `hour : minute : AM/PM`.
However, the correct format for Korean conventions is `AM/PM : hour :
minute`.
This PR modifies the `CupertinoDatePicker` to display the time in the
correct order when the Korean locale is used.
## Changes
- Updated the time display order for the Korean (`ko`) locale in
`CupertinoDatePicker`.
- Previous format: `hour : minute : AM/PM`
- Updated format: `AM/PM : hour : minute`
## 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.
2025-02-27 19:36:21 +00:00
flutter-pub-roller-bot
0e9190505a
Roll pub packages ( #163567 )
...
This PR was generated by `flutter update-packages --force-upgrade`.
---------
Co-authored-by: Michael Goderbauer <goderbauer@google.com>
2025-02-27 17:02:18 +00:00
Sam Rawlins
a321b25e6d
Remove as-clause in doc-import; they don't work yet ( #164234 )
...
I'll be adding a warning against using `@docImport as`, as it doesn't
yet work.
2025-02-27 16:54:10 +00:00