Material Chip 按钮语义
摘要
#Flutter 现在将button
的语义标签应用于所有交互式 Material Chip,以实现可访问性目的。
上下文
#交互式 Material Chip(即 ActionChip
、ChoiceChip
、FilterChip
和 InputChip
)现在在语义上被标记为按钮。但是,非交互式信息 Chip
则不是。
将芯片标记为按钮有助于辅助工具、搜索引擎和其他语义分析软件理解应用程序的含义。例如,它允许屏幕阅读器(例如 Android 上的 TalkBack 和 iOS 上的 VoiceOver)将可点击的芯片宣布为“按钮”,这可以帮助用户浏览您的应用程序。在此更改之前,除非您通过手动将缺少的语义添加到应用程序中的芯片小部件来实现变通方法,否则辅助工具的用户可能会有不太好的体验。
更改说明
#包装所有芯片类以描述其语义属性的最外层Semantics
小部件已修改。
以下更改适用于ActionChip
、ChoiceChip
、FilterChip
和InputChip
这些属性更改使交互式芯片的语义行为与其他Material 按钮保持一致。
对于非交互式信息Chip
迁移指南
#您可能不需要执行任何迁移。此更改仅在您通过将提供给Chip
的label
字段的小部件包装在标记为button: true
的Semantics
小部件中来解决 Material 芯片缺少button
语义的问题时才会影响您。在这种情况下,内部和外部的button
语义发生冲突,导致引入此更改后按钮的可点击区域缩小到标签的大小。通过删除该Semantics
小部件并将其替换为其子级,或在仍需要将其他语义属性应用于芯片的label
小部件时删除button: true
属性来解决此问题。
以下代码段使用InputChip
作为示例,但相同的过程也适用于ActionChip
、ChoiceChip
和FilterChip
。
情况 1:删除Semantics
小部件。
迁移前代码
Widget myInputChip = InputChip(
onPressed: () {},
label: Semantics(
button: true,
child: Text('My Input Chip'),
),
);
迁移后代码
Widget myInputChip = InputChip(
onPressed: () {},
label: Text('My Input Chip'),
);
情况 2:从Semantics
小部件中删除button:true
。
迁移前代码
Widget myInputChip = InputChip(
onPressed: () {},
label: Semantics(
button: true,
hint: 'Example Hint',
child: Text('My Input Chip'),
),
);
迁移后代码
Widget myInputChip = InputChip(
onPressed: () {},
label: Semantics(
hint: 'Example Hint',
child: Text('My Input Chip'),
),
);
时间线
#包含版本:1.23.0-7.0.pre
稳定版发布:2.0.0
参考
#API 文档
ActionChip
Chip
ChoiceChip
FilterChip
InputChip
- Material 按钮
- Material 芯片
语义
SemanticsProperties.button
SemanticsProperties.enabled
相关问题
- 问题 58010:InputChip 在 iOS 上未为 a11y 公告任何操作
相关 PR
- PR 60141:调整 Material Chip a11y 语义以匹配按钮
- PR 60645:恢复“调整 Material Chip a11y 语义以匹配按钮(#60141)”
- PR 61048:重新落地“调整 Material Chip a11y 语义以匹配按钮(#60141)”
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题。