-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Add table related semantics role #162339
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add table related semantics role #162339
Conversation
engine/src/flutter/lib/web_ui/lib/src/engine/semantics/table.dart
Outdated
Show resolved
Hide resolved
engine/src/flutter/lib/web_ui/lib/src/engine/semantics/table.dart
Outdated
Show resolved
Hide resolved
0c487b2 to
b0fc459
Compare
8c0ba25 to
5ef4e94
Compare
3ef5933 to
7445034
Compare
|
this PR is ready for review, also cc @chunhtai |
| /// The main display for a tab. | ||
| tabPanel, | ||
|
|
||
| /// A Table. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This requires a bit more description, you may be able to get some idea from https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/table_role
Also this should mention that the table cell should use cell and row should use row ...etc
| /// * [table], which is the role for tables. | ||
| row, | ||
|
|
||
| /// A column header in a table. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe explain a bit what is a column header
| semanticsObject, | ||
| preferredLabelRepresentation: LabelRepresentation.ariaLabel, | ||
| ) { | ||
| setAriaRole('table'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it looks like you may also needs something like aria-rowcount, aria-colcount
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok I will add rowcount, colcount, rowindex ,colindex to semantics nodes.
btw will semantics nodes get too many parameter if every role has some extra attributes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is web specific requirement. I don't think you need to add it in framework side, I think all of the data can be interpolate from the tree structure in the engine side
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like this is not address yet, same for other aria property requirements
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these aria attributes ( rowcount, colcount, rowindex ,colindex) are all related to Row and i will add them
in the next PR when i add a role for row
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah the table doesn't know the which set of cell formed a row yet?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, cells are directly under table now
| semanticsObject, | ||
| preferredLabelRepresentation: LabelRepresentation.ariaLabel, | ||
| ) { | ||
| setAriaRole('row'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will need aria-rowindex
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also not entirely sure aria-rowspan or aria-colspan applies in our table widget
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we currently don't support row span and col span in our widgets.
related issue: #21594
| semanticsObject, | ||
| preferredLabelRepresentation: LabelRepresentation.ariaLabel, | ||
| ) { | ||
| setAriaRole('columnheader'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will need aria-colindex
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also aria-sort
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are those things required?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
they are documented in the mdn, not sure if they really influence the screen reader. would need to test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested a html table with voice over, it can announce things like row 2 of 3 column 4 of 5 when focus on a cell.
I think these attributes are needed to support that.
| ); | ||
| } | ||
| return label; | ||
| return TableCell(child: label); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
will this cause behavior change besides the semantics role?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i dont think it will cause any behavior change, TableCell is just a wrapper
|
|
||
| static FlutterError? _semanticsCell(SemanticsNode node) { | ||
| if (node.parent?.role != SemanticsRole.table) { | ||
| return FlutterError('A columnHeader must be a child of a table'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
copy paste error?
| } | ||
|
|
||
| static FlutterError? _semanticsCell(SemanticsNode node) { | ||
| if (node.parent?.role != SemanticsRole.table) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what if they are in a row?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I mentioned that in the PR description, I didn't add a role for table row in this PR, because right now in framework tableRow is not a widget or a renderObject, but just some data.
I will update the tests if i add a role for table row later.
| SemanticsRole.tabPanel => _noCheckRequired, | ||
| SemanticsRole.table => _noCheckRequired, | ||
| SemanticsRole.cell => _semanticsCell, | ||
| SemanticsRole.row => _noCheckRequired, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
shouldn't this check if they are under table as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't add a role for table row in this PR so i didn't add row checks here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is the engine side properly implemented? if not this should just throw if someone attempt to use it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will throw a unimplemented error for row here
|
|
||
| /// A cell in a table. | ||
| /// | ||
| /// see also: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: here and elsewhere s/see/See/, add one empty line after this line, and add one extra space before the * (example).
| /// | ||
| /// see also: | ||
| /// * [table], which is the role for tables. | ||
| cell, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to document/enforce/assert that cell, row, and columnHeader roles must be children of a table?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there's some tests in [packages/flutter/lib/src/semantics/semantics.dart]
| semanticsObject, | ||
| preferredLabelRepresentation: LabelRepresentation.ariaLabel, | ||
| ) { | ||
| setAriaRole('columnheader'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are those things required?
| final SemanticsObject object = pumpSemantics(); | ||
| expect(object.semanticRole?.kind, EngineSemanticsRole.table); | ||
| expect(object.element.getAttribute('role'), 'table'); | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's been so long I don't remember why we do this anymore, but all other tests end with:
semantics().semanticsEnabled = false;
Maybe because it's the only way to clear the tree from the previous test?
| /// * [cell], [row], [columnHeader] for table related roles. | ||
| table, | ||
|
|
||
| /// A cell in a table that does not contain column or row header information. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| /// A cell in a table that does not contain column or row header information. | |
| /// A cell in a [table] that does not contain column or row header information. |
| /// * [table],[row], [columnHeader] for table related roles. | ||
| cell, | ||
|
|
||
| /// A row of cells within a tabular structure. A row contains one or more cells or column headers. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the first paragraph should be one brief sentence
| /// * [table] ,[cell],[columnHeader] for table related roles. | ||
| row, | ||
|
|
||
| /// A column header in a table is a cell in a row contains header information for a column. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe rephrase
A cell in a table contains header information for a column
| semanticsObject, | ||
| preferredLabelRepresentation: LabelRepresentation.ariaLabel, | ||
| ) { | ||
| setAriaRole('table'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like this is not address yet, same for other aria property requirements
| SemanticsRole.tabPanel => _noCheckRequired, | ||
| SemanticsRole.table => _noCheckRequired, | ||
| SemanticsRole.cell => _semanticsCell, | ||
| SemanticsRole.row => _noCheckRequired, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is the engine side properly implemented? if not this should just throw if someone attempt to use it
chunhtai
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
ccc4b74 to
1b668b4
Compare
update lint add checks add tests lint add tests lint SemanticsRole.cell should be inside add more table related roles add more table related roles Update table.dart Update table.dart add more table roles add role to `table` lint add role to `table` lint lint update comments Update engine/src/flutter/lib/web_ui/lib/src/engine/semantics/table.dart export add table role
1b668b4 to
bc1feec
Compare
Roll Flutter from e8f34a9 to 39b4951 (95 revisions) flutter/flutter@e8f34a9...39b4951 2025-02-18 fluttergithubbot@gmail.com Marks Windows_arm64 plugin_test_windows to be flaky (flutter/flutter#163123) 2025-02-18 jonahwilliams@google.com [android] use macro definition to shrink repetitive JNI code size. (flutter/flutter#163395) 2025-02-18 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#163474) 2025-02-18 mdebbar@google.com [web] Cleanup everything HTML from the engine (outside html/ folder) (flutter/flutter#162840) 2025-02-18 flar@google.com [Impeller] add support for rational bezier conics to Path (flutter/flutter#163282) 2025-02-18 36861262+QuncCccccc@users.noreply.github.com Change `cardTheme`, `dialogTheme`, and `tabBarTheme` type to `xxxThemeData` (flutter/flutter#157292) 2025-02-18 jason-simmons@users.noreply.github.com Update integration test and benchmark Android .gitignore files to match the current app template (flutter/flutter#163276) 2025-02-18 chinmaygarde@google.com [Impeller] Don't create a redundant typography context. (flutter/flutter#163513) 2025-02-18 engine-flutter-autoroll@skia.org Roll Dart SDK from fcef25f18e4d to 023ac80cef14 (1 revision) (flutter/flutter#163110) 2025-02-18 reidbaker@google.com update module_host_with_custom_build_v2_embedding to target android 35 and to use the latest gradle and agp versions (flutter/flutter#163542) 2025-02-18 jonahwilliams@google.com [Impeller] when binding to READ_FRAMEBUFFER, treat multisampled textures as single sampled. (flutter/flutter#163345) 2025-02-18 sokolovskyi.konstantin@gmail.com Add missing properties to _ArcPaintPredicate. (flutter/flutter#162572) 2025-02-18 engine-flutter-autoroll@skia.org Roll Packages from 8542af3 to cb4fb13 (4 revisions) (flutter/flutter#163544) 2025-02-18 reidbaker@google.com Remove bringup for android_display_cutout (flutter/flutter#163312) 2025-02-18 reidbaker@google.com Create VersionUtils class and unit tests and extract logic out of flutter.groovy (flutter/flutter#163166) 2025-02-18 matanlurey@users.noreply.github.com Invalidate `pod install` output if `.flutter-plugins-dependencies` content changes. (flutter/flutter#163275) 2025-02-18 robert.ancell@canonical.com Replace hard coded numbers with mouse button defines (flutter/flutter#163503) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 9147a9654043 to 6da10829d017 (1 revision) (flutter/flutter#163531) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 92aaa4e20ea7 to 9147a9654043 (2 revisions) (flutter/flutter#163512) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 71a160edc9d9 to 92aaa4e20ea7 (1 revision) (flutter/flutter#163488) 2025-02-17 engine-flutter-autoroll@skia.org Roll Packages from 625023a to 8542af3 (21 revisions) (flutter/flutter#163484) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 7e3129d5db11 to 71a160edc9d9 (1 revision) (flutter/flutter#163459) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 40ce5ef20d22 to 7e3129d5db11 (1 revision) (flutter/flutter#163451) 2025-02-16 engine-flutter-autoroll@skia.org Roll Skia from bb166c85957b to 40ce5ef20d22 (1 revision) (flutter/flutter#163403) 2025-02-15 engine-flutter-autoroll@skia.org Roll Skia from ff94581f1f8a to bb166c85957b (1 revision) (flutter/flutter#163381) 2025-02-15 58529443+srujzs@users.noreply.github.com Move DWDS initialization into the onLoadEndCallback for the DDC library bundle format (flutter/flutter#163338) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Handle MakeGrContext returning null (flutter/flutter#163332) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 13a3b6f34ee8 to ff94581f1f8a (1 revision) (flutter/flutter#163347) 2025-02-14 bkonyi@google.com Fix failing chrome_dev_mode tests (flutter/flutter#163346) 2025-02-14 47866232+chunhtai@users.noreply.github.com Adds all semantics roles (flutter/flutter#163075) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 20924303cc25 to 13a3b6f34ee8 (1 revision) (flutter/flutter#163336) 2025-02-14 bkonyi@google.com [ Widget Preview ] Add experimental support for web-based widget preview environment (flutter/flutter#163154) 2025-02-14 jonahwilliams@google.com [Impeller] don't use glFramebufferBlit for onscreen restore. (flutter/flutter#163327) 2025-02-14 58529443+srujzs@users.noreply.github.com Align web terminal messages with the VM (flutter/flutter#163268) 2025-02-14 victoreronmosele@gmail.com Manually roll customer_testing to enable rfw tests (flutter/flutter#163030) 2025-02-14 ybz975218925@gmail.com Refactor SliverMainAxisGroup for reverse mode. (flutter/flutter#161849) 2025-02-14 30870216+gaaclarke@users.noreply.github.com Tweaked TextContents math to avoid floating point errors (flutter/flutter#162480) 2025-02-14 kevinjchisholm@google.com [release] Update cherry-pick CHANGELOG requirements (flutter/flutter#163318) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 85722a1db585 to 20924303cc25 (2 revisions) (flutter/flutter#163293) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 5a38d23ee247 to 85722a1db585 (1 revision) (flutter/flutter#163286) 2025-02-14 matanlurey@users.noreply.github.com Add `.flutter-plugins-dependencies` to `FlutterBuildSystem`; update logic, add tests. (flutter/flutter#163278) 2025-02-14 jhy03261997@gmail.com Add table related semantics role (flutter/flutter#162339) 2025-02-14 jason-simmons@users.noreply.github.com [Impeller] Call glDebugMessageControlKHR only if the KHR_debug extension is available (flutter/flutter#163273) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 748415976ad1 to 5a38d23ee247 (3 revisions) (flutter/flutter#163271) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163175) 2025-02-14 jacksongardner@google.com [skwasm] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163251) ...
**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: #21594
related: #162339
issue: #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
Roll Flutter from e8f34a9 to 39b4951 (95 revisions) flutter/flutter@e8f34a9...39b4951 2025-02-18 fluttergithubbot@gmail.com Marks Windows_arm64 plugin_test_windows to be flaky (flutter/flutter#163123) 2025-02-18 jonahwilliams@google.com [android] use macro definition to shrink repetitive JNI code size. (flutter/flutter#163395) 2025-02-18 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#163474) 2025-02-18 mdebbar@google.com [web] Cleanup everything HTML from the engine (outside html/ folder) (flutter/flutter#162840) 2025-02-18 flar@google.com [Impeller] add support for rational bezier conics to Path (flutter/flutter#163282) 2025-02-18 36861262+QuncCccccc@users.noreply.github.com Change `cardTheme`, `dialogTheme`, and `tabBarTheme` type to `xxxThemeData` (flutter/flutter#157292) 2025-02-18 jason-simmons@users.noreply.github.com Update integration test and benchmark Android .gitignore files to match the current app template (flutter/flutter#163276) 2025-02-18 chinmaygarde@google.com [Impeller] Don't create a redundant typography context. (flutter/flutter#163513) 2025-02-18 engine-flutter-autoroll@skia.org Roll Dart SDK from fcef25f18e4d to 023ac80cef14 (1 revision) (flutter/flutter#163110) 2025-02-18 reidbaker@google.com update module_host_with_custom_build_v2_embedding to target android 35 and to use the latest gradle and agp versions (flutter/flutter#163542) 2025-02-18 jonahwilliams@google.com [Impeller] when binding to READ_FRAMEBUFFER, treat multisampled textures as single sampled. (flutter/flutter#163345) 2025-02-18 sokolovskyi.konstantin@gmail.com Add missing properties to _ArcPaintPredicate. (flutter/flutter#162572) 2025-02-18 engine-flutter-autoroll@skia.org Roll Packages from 8542af3 to cb4fb13 (4 revisions) (flutter/flutter#163544) 2025-02-18 reidbaker@google.com Remove bringup for android_display_cutout (flutter/flutter#163312) 2025-02-18 reidbaker@google.com Create VersionUtils class and unit tests and extract logic out of flutter.groovy (flutter/flutter#163166) 2025-02-18 matanlurey@users.noreply.github.com Invalidate `pod install` output if `.flutter-plugins-dependencies` content changes. (flutter/flutter#163275) 2025-02-18 robert.ancell@canonical.com Replace hard coded numbers with mouse button defines (flutter/flutter#163503) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 9147a9654043 to 6da10829d017 (1 revision) (flutter/flutter#163531) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 92aaa4e20ea7 to 9147a9654043 (2 revisions) (flutter/flutter#163512) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 71a160edc9d9 to 92aaa4e20ea7 (1 revision) (flutter/flutter#163488) 2025-02-17 engine-flutter-autoroll@skia.org Roll Packages from 625023a to 8542af3 (21 revisions) (flutter/flutter#163484) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 7e3129d5db11 to 71a160edc9d9 (1 revision) (flutter/flutter#163459) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 40ce5ef20d22 to 7e3129d5db11 (1 revision) (flutter/flutter#163451) 2025-02-16 engine-flutter-autoroll@skia.org Roll Skia from bb166c85957b to 40ce5ef20d22 (1 revision) (flutter/flutter#163403) 2025-02-15 engine-flutter-autoroll@skia.org Roll Skia from ff94581f1f8a to bb166c85957b (1 revision) (flutter/flutter#163381) 2025-02-15 58529443+srujzs@users.noreply.github.com Move DWDS initialization into the onLoadEndCallback for the DDC library bundle format (flutter/flutter#163338) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Handle MakeGrContext returning null (flutter/flutter#163332) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 13a3b6f34ee8 to ff94581f1f8a (1 revision) (flutter/flutter#163347) 2025-02-14 bkonyi@google.com Fix failing chrome_dev_mode tests (flutter/flutter#163346) 2025-02-14 47866232+chunhtai@users.noreply.github.com Adds all semantics roles (flutter/flutter#163075) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 20924303cc25 to 13a3b6f34ee8 (1 revision) (flutter/flutter#163336) 2025-02-14 bkonyi@google.com [ Widget Preview ] Add experimental support for web-based widget preview environment (flutter/flutter#163154) 2025-02-14 jonahwilliams@google.com [Impeller] don't use glFramebufferBlit for onscreen restore. (flutter/flutter#163327) 2025-02-14 58529443+srujzs@users.noreply.github.com Align web terminal messages with the VM (flutter/flutter#163268) 2025-02-14 victoreronmosele@gmail.com Manually roll customer_testing to enable rfw tests (flutter/flutter#163030) 2025-02-14 ybz975218925@gmail.com Refactor SliverMainAxisGroup for reverse mode. (flutter/flutter#161849) 2025-02-14 30870216+gaaclarke@users.noreply.github.com Tweaked TextContents math to avoid floating point errors (flutter/flutter#162480) 2025-02-14 kevinjchisholm@google.com [release] Update cherry-pick CHANGELOG requirements (flutter/flutter#163318) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 85722a1db585 to 20924303cc25 (2 revisions) (flutter/flutter#163293) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 5a38d23ee247 to 85722a1db585 (1 revision) (flutter/flutter#163286) 2025-02-14 matanlurey@users.noreply.github.com Add `.flutter-plugins-dependencies` to `FlutterBuildSystem`; update logic, add tests. (flutter/flutter#163278) 2025-02-14 jhy03261997@gmail.com Add table related semantics role (flutter/flutter#162339) 2025-02-14 jason-simmons@users.noreply.github.com [Impeller] Call glDebugMessageControlKHR only if the KHR_debug extension is available (flutter/flutter#163273) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 748415976ad1 to 5a38d23ee247 (3 revisions) (flutter/flutter#163271) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163175) 2025-02-14 jacksongardner@google.com [skwasm] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163251) ...
Roll Flutter from e8f34a9 to 39b4951 (95 revisions) flutter/flutter@e8f34a9...39b4951 2025-02-18 fluttergithubbot@gmail.com Marks Windows_arm64 plugin_test_windows to be flaky (flutter/flutter#163123) 2025-02-18 jonahwilliams@google.com [android] use macro definition to shrink repetitive JNI code size. (flutter/flutter#163395) 2025-02-18 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#163474) 2025-02-18 mdebbar@google.com [web] Cleanup everything HTML from the engine (outside html/ folder) (flutter/flutter#162840) 2025-02-18 flar@google.com [Impeller] add support for rational bezier conics to Path (flutter/flutter#163282) 2025-02-18 36861262+QuncCccccc@users.noreply.github.com Change `cardTheme`, `dialogTheme`, and `tabBarTheme` type to `xxxThemeData` (flutter/flutter#157292) 2025-02-18 jason-simmons@users.noreply.github.com Update integration test and benchmark Android .gitignore files to match the current app template (flutter/flutter#163276) 2025-02-18 chinmaygarde@google.com [Impeller] Don't create a redundant typography context. (flutter/flutter#163513) 2025-02-18 engine-flutter-autoroll@skia.org Roll Dart SDK from fcef25f18e4d to 023ac80cef14 (1 revision) (flutter/flutter#163110) 2025-02-18 reidbaker@google.com update module_host_with_custom_build_v2_embedding to target android 35 and to use the latest gradle and agp versions (flutter/flutter#163542) 2025-02-18 jonahwilliams@google.com [Impeller] when binding to READ_FRAMEBUFFER, treat multisampled textures as single sampled. (flutter/flutter#163345) 2025-02-18 sokolovskyi.konstantin@gmail.com Add missing properties to _ArcPaintPredicate. (flutter/flutter#162572) 2025-02-18 engine-flutter-autoroll@skia.org Roll Packages from 8542af3 to cb4fb13 (4 revisions) (flutter/flutter#163544) 2025-02-18 reidbaker@google.com Remove bringup for android_display_cutout (flutter/flutter#163312) 2025-02-18 reidbaker@google.com Create VersionUtils class and unit tests and extract logic out of flutter.groovy (flutter/flutter#163166) 2025-02-18 matanlurey@users.noreply.github.com Invalidate `pod install` output if `.flutter-plugins-dependencies` content changes. (flutter/flutter#163275) 2025-02-18 robert.ancell@canonical.com Replace hard coded numbers with mouse button defines (flutter/flutter#163503) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 9147a9654043 to 6da10829d017 (1 revision) (flutter/flutter#163531) 2025-02-18 engine-flutter-autoroll@skia.org Roll Skia from 92aaa4e20ea7 to 9147a9654043 (2 revisions) (flutter/flutter#163512) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 71a160edc9d9 to 92aaa4e20ea7 (1 revision) (flutter/flutter#163488) 2025-02-17 engine-flutter-autoroll@skia.org Roll Packages from 625023a to 8542af3 (21 revisions) (flutter/flutter#163484) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 7e3129d5db11 to 71a160edc9d9 (1 revision) (flutter/flutter#163459) 2025-02-17 engine-flutter-autoroll@skia.org Roll Skia from 40ce5ef20d22 to 7e3129d5db11 (1 revision) (flutter/flutter#163451) 2025-02-16 engine-flutter-autoroll@skia.org Roll Skia from bb166c85957b to 40ce5ef20d22 (1 revision) (flutter/flutter#163403) 2025-02-15 engine-flutter-autoroll@skia.org Roll Skia from ff94581f1f8a to bb166c85957b (1 revision) (flutter/flutter#163381) 2025-02-15 58529443+srujzs@users.noreply.github.com Move DWDS initialization into the onLoadEndCallback for the DDC library bundle format (flutter/flutter#163338) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Handle MakeGrContext returning null (flutter/flutter#163332) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 13a3b6f34ee8 to ff94581f1f8a (1 revision) (flutter/flutter#163347) 2025-02-14 bkonyi@google.com Fix failing chrome_dev_mode tests (flutter/flutter#163346) 2025-02-14 47866232+chunhtai@users.noreply.github.com Adds all semantics roles (flutter/flutter#163075) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 20924303cc25 to 13a3b6f34ee8 (1 revision) (flutter/flutter#163336) 2025-02-14 bkonyi@google.com [ Widget Preview ] Add experimental support for web-based widget preview environment (flutter/flutter#163154) 2025-02-14 jonahwilliams@google.com [Impeller] don't use glFramebufferBlit for onscreen restore. (flutter/flutter#163327) 2025-02-14 58529443+srujzs@users.noreply.github.com Align web terminal messages with the VM (flutter/flutter#163268) 2025-02-14 victoreronmosele@gmail.com Manually roll customer_testing to enable rfw tests (flutter/flutter#163030) 2025-02-14 ybz975218925@gmail.com Refactor SliverMainAxisGroup for reverse mode. (flutter/flutter#161849) 2025-02-14 30870216+gaaclarke@users.noreply.github.com Tweaked TextContents math to avoid floating point errors (flutter/flutter#162480) 2025-02-14 kevinjchisholm@google.com [release] Update cherry-pick CHANGELOG requirements (flutter/flutter#163318) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 85722a1db585 to 20924303cc25 (2 revisions) (flutter/flutter#163293) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 5a38d23ee247 to 85722a1db585 (1 revision) (flutter/flutter#163286) 2025-02-14 matanlurey@users.noreply.github.com Add `.flutter-plugins-dependencies` to `FlutterBuildSystem`; update logic, add tests. (flutter/flutter#163278) 2025-02-14 jhy03261997@gmail.com Add table related semantics role (flutter/flutter#162339) 2025-02-14 jason-simmons@users.noreply.github.com [Impeller] Call glDebugMessageControlKHR only if the KHR_debug extension is available (flutter/flutter#163273) 2025-02-14 engine-flutter-autoroll@skia.org Roll Skia from 748415976ad1 to 5a38d23ee247 (3 revisions) (flutter/flutter#163271) 2025-02-14 1961493+harryterkelsen@users.noreply.github.com [canvaskit] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163175) 2025-02-14 jacksongardner@google.com [skwasm] Use `transferToImageBitmap` instead of `createImageBitmap` (flutter/flutter#163251) ...
**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: flutter#21594
related: flutter#162339
issue: flutter#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
issue: #45205
This PR added roles: table,cell,row,columnheader in engine side.
Also added table, cell , columnheader in framework widgets
TableandDataTable.This PR didn't add
rowin framework side because right now TableCell is ParentDataWidget expecting its parent to be a Table, tableRow is not a widget or a renderObject, but just some data. If we want to add a role torow, we need to do some refactor toTableCell,TableRowandTable. If we need to add row, I will do that in another PR.Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.