LongCatIsLooong
7ce41abbd2
OverlayPortal.overlayChildLayoutBuilder
(#164034 )
...
This API allows the widget tree of an `OverlayPortal.overlayChild` to
depend on various layout information (e.g. the incoming constraints, or
the size of a RenderObject) from another child subtree of `Overlay` that
does layout before the `overlayChild`.
Most RenderObject subclasses can only access its child's or children's
layout info, but not the layout info of its other descendants because of
the "relayout boundary" optimization. Such locality makes the layout
dependencies easier to reason about but it also makes it difficult to
implement certain common UI patterns (see the examples in the
description of the [previous
PR](https://github.com/flutter/flutter/pull/163575 ))
The API is currently only available on `OverlayPortal` as it is the only
Overlay API (AFAIK) that guarantees every render object in a "path"
within the render tree has finished doing layout.
TODO: polish the API docs and code comments
TODO: more tests?
TODO: markNeedsLayout should not imply markNeedsPaint in this case (or
in layout builders in general).
part1: https://github.com/flutter/flutter/pull/163575
diff this ... part1
https://github.com/LongCatIsLooong/flutter/compare/OverlayPortal-always-add-to-dirty-list...LongCatIsLooong:flutter:OverlayPortal-paint-transform-builder
## 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-14 19:42:18 +00:00
Sangam Shrestha
d261411b4c
Remove redundant useMaterial3: true
( #163376 )
...
<!--
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 redundant useMaterial3: true as described in
https://github.com/flutter/flutter/issues/162818
*List which issues are fixed by this PR. You must list at least one
issue. An issue is not required if the PR fixes something trivial like a
typo.*
- https://github.com/flutter/flutter/issues/162818
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
---------
Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com>
2025-03-14 17:50:20 +00:00
Gray Mackall
6806015866
[FGP conversion] Port FlutterExtension
from Groovy to Kotlin ( #165143 )
...
Ports `FlutterExtension` from groovy to kotlin.
Fixes https://github.com/flutter/flutter/issues/162105
## 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: Gray Mackall <mackall@google.com>
2025-03-13 23:10:24 +00:00
chunhtai
c2bb3accba
Prevent explicit roles from merging ( #164732 )
...
<!--
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
-->
If merging explicit roles, some of the information may be dropped.
## 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-13 22:15:29 +00:00
Harlen Batagelo
02f3ddf989
Update the mouse cursor handler to work with multi-view on Windows ( #163855 )
...
Partially fixes https://github.com/flutter/flutter/issues/142845 .
This PR removes implicit view assumptions from the
`'flutter/mousecursor'` channel handler on Windows.
The cursor is now set for all existing views, ensuring that the current
`FlutterWindow` with the cursor in its client area uses the correct
cursor. The method arguments remain unchanged.
Cursor handler tests have also been updated to avoid assuming an
implicit view.
## 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-13 22:10:02 +00:00
chunhtai
5122ffd069
Adds list and list item roles ( #164809 )
...
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->
fixes https://github.com/flutter/flutter/issues/162121
## 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-13 21:41:15 +00:00
Jason Simmons
212d7d8209
[native assets] Add the native asset manifest to the bundle dependencies in non-debug modes ( #165023 )
...
Fixes https://github.com/flutter/flutter/issues/164149
2025-03-13 20:57:59 +00:00
ash2moon
0aa0ad160e
add docs on android limitation for screen orientations ( #165021 )
...
Resolves https://github.com/flutter/flutter/issues/99149
## 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-13 17:26:32 +00:00
Loïc Sharma
627f1d200b
Add CupertinoSwitch widget of the week video ( #165093 )
2025-03-13 17:04:08 +00:00
chunhtai
884de61855
adds status and alert roles ( #164925 )
...
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->
fixes https://github.com/flutter/flutter/issues/162287
fixes https://github.com/flutter/flutter/issues/162286
## 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-13 15:54:08 +00:00
Bartek Pacia
ea4cdcf39e
remove conditional code for handling very old AGP versions ( #162053 )
...
I think code paths for AGP version <7 aren't needed anymore.
I can also imagine it will be hard to do such dynamic stuff in Kotlin,
so it's better to get rid of it.
Also, I added some explicit types, this reduces the amount of
grey/unresolved identifiers in IntelliJ by quite a lot, making it easier
to understand code (again, this should help in conversion to Kotlin
later on).
## 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: Reid Baker <1063596+reidbaker@users.noreply.github.com>
2025-03-13 15:32:21 +00:00
Bruno Leroux
c6c518653c
Fix NavigationBar indicator overlay color ( #164484 )
...
## Description
This PR fixes NavigationBar lacking visual feedback on the active
destination indicator.
### Before:
The navigation indicator does not change color when hovered or focused:
https://github.com/user-attachments/assets/a1e67dee-4a38-4711-ba90-bdcd9bed3226
### After:
The navigation indicator color changes (slightly darker):
https://github.com/user-attachments/assets/1b1cc335-2cf4-4c41-9c53-696537707c72
## Related Issue
Fixes [NavigationBar lacks visual feedback when focused or
hovered](https://github.com/flutter/flutter/issues/163871 )
## Tests
- Updates several helper functions which are used by several tests.
- Updates several test: adding an Ink widget changes the coordinates
used in several tests because these coordinates are now relative to the
Ink offset.
- Will impact fours golden tests which were capturing the bad behavior
(indicator color not changing when hovered or focused).
2025-03-13 08:02:36 +00:00
Loïc Sharma
31587ea6b4
Add CupertinoCheckbox widget of the week video ( #165094 )
2025-03-13 06:08:25 +00:00
Loïc Sharma
db294f7bfe
[Cupertino] Improve comment in navigation bar docs ( #164067 )
2025-03-13 06:08:24 +00:00
Hannah Jin
6aaa4eb9e3
[framework]Add semantics role to table rows. ( #163337 )
...
**1. framework side:**
This PR Create semantics node for rows in table's
`assembleSemanticsNode` function.
**2. web side:**
I tested on my mac, and i need to remove the
`<flt-semantics-container>` between table and row, row and cell to
traverse inside table, removing those transfom intermediate containers
on web will be a bit of hassle and will be in another separate PR.
For example this code can only announce table but can’t get into cells.
```
<flt-semantics id="flt-semantic-node-4" role="table" style="position: absolute; overflow: visible; width: 751px; height: 56px; transform-origin: 0px 0px 0px; transform: matrix(1, 0, 0, 1, 0, 56); pointer-events: none; z-index: 1;">
<flt-semantics-container style="position: absolute; pointer-events: none; top: 0px; left: 0px;">
<flt-semantics id="flt-semantic-node-6" role="row" style="position: absolute; overflow: visible; width: 751px; height: 56px; top: 0px; left: 0px; pointer-events: none;">
<flt-semantics-container style="position: absolute; pointer-events: none; top: 0px; left: 0px;">
<flt-semantics id="flt-semantic-node-5" role="columnheader" aria-label="Name" style="position: absolute; overflow: visible; width: 751px; height: 56px; top: 0px; left: 0px; pointer-events: all;"></flt-semantics>
</flt-semantics-container>
</flt-semantics>
</flt-semantics-container>
</flt-semantics>
```
If I removed the in between `</flt-semantics-container>`, the code come
```
<flt-semantics id="flt-semantic-node-4" role="table" style="position: absolute; overflow: visible; width: 751px; height: 56px; transform-origin: 0px 0px 0px; transform: matrix(1, 0, 0, 1, 0, 56); pointer-events: none; z-index: 1;">
<flt-semantics id="flt-semantic-node-6" role="row" style="position: absolute; overflow: visible; width: 751px; height: 56px; top: 0px; left: 0px; pointer-events: none;">
<flt-semantics id="flt-semantic-node-5" role="columnheader" aria-label="Name" style="position: absolute; overflow: visible; width: 751px; height: 56px; top: 0px; left: 0px; pointer-events: all;"></flt-semantics>
</flt-semantics>
</flt-semantics>
```
And I can get into table cells.
**3. Other aria-attributes:**
[aria-colcount](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colcount ) ,[aria-rowcount](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowcount )
[aria-colindex](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-colindex )
[aria-rowindex](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-rowindex )
* theres attributes are only needed if some rows and columns are hidden
in the Dom tree. havn't added them yet
aria-rowspan , aria-colspan :
*we currently don't support row span and col span in our widgets.
related issue: https://github.com/flutter/flutter/issues/21594
related: https://github.com/flutter/flutter/pull/162339
issue: https://github.com/flutter/flutter/issues/45205
## 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-13 04:39:28 +00:00
Kate Lovett
df676dc6e7
Add onHover and onFocusChange callbacks for TabBar ( #164816 )
...
Fixes https://github.com/flutter/flutter/issues/159444
Fixes https://github.com/flutter/flutter/issues/146089
This adds callbacks to TabBar for onHover and onFocusChange.
They pipe through to the underlying Inkwell widget that is wrapped
around each Tab of the TabBar during build.
#### Alternatives
- I did consider adding these callbacks to Tab instead, but felt that
going through TabBar would be better. If implemented in Tab, the user
would need to define callbacks for each tab. This PR makes it so there
is only need for one callback, and the associated Tab index is provided.
Also, since the Inkwell is applied in the TabBar, it's kludgy to have to
extract that from the Tabs _in_ TabBar later to pass on to the Inkwell.
👃
- Digging in to the requests in the linked issues, the user wants to
change various stylings in response to these events.
WidgetStateProperties were considered, but there are so many potential
styling properties that going this route would require greatly
increasing the API surface here. Tab.child allows the user to provide
whatever widget they would like to have as the content. Being able to
modify Tab.child in response to these events is a better way go instead
of exposing a ton of different properties.
## 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-13 01:32:05 +00:00
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