Flutter 语义可访问性问题 [flutter]

Flutter semantics accessibility issues [flutter]

提问人:YotiS 提问时间:11/4/2023 最后编辑:YotiS 更新时间:11/16/2023 访问量:45

问:

我正在尝试将类似于 HTML 标签的标题添加到使用 Dart/Flutter 创建的登录网页中。这是为了遵守 WCAG 可访问性指南。为了实现这一点,我利用了 Semantics 小部件并将 header 属性设置为 true->h1

  Widget _buildTitle(BuildContext context) {
    return SizedBox(
      height: 56,
      width: double.infinity,
      child: Semantics(
        header: true,
        label: context.loc.semanticsLogInText,
        child: Text(
          context.loc.semanticsLogInText,
          style: Theme.of(context).textTheme.headlineLarge,
          textAlign: TextAlign.left,
        ),
      ),
    );
  }

但仍然无法正常工作屏幕阅读器(我的 Mac 上的画外音)没有获得页面的任何结构。也用 Wave 进行了测试,结果相同 ->

enter image description here

MAC 语音 ->

enter image description here

Flutter Dart 标头 可访问性 语义

评论

0赞 Albert221 11/4/2023
传递给有帮助吗?它是否适用于发布模式应用?语义节点是否正确打印出来?container: trueSemanticsdebugDumpSemanticsTree()

答:

0赞 YotiS 11/16/2023 #1

经过广泛的研究,我发现这个问题可能是因为 WAVE 专门搜索 HTML 标题元素(如 、 等),这些元素在网页结构中是标准的。然而,Flutter 的小部件,包括 Text 和 Semantics,在为 Web 编译时不会直接转换为这些 HTML 元素。为了解决这个问题,我设计了一种使用 universal_html 包来处理 HTML 元素的方法。->

  void addHtmlHeading(BuildContext context) {
   final html.Element heading = html.HeadingElement.h1();
   heading.text = "my header";
   html.document.body?.children.add(heading);
  }

在那之后,波浪工具识别了我的标题,一切都很好!

enter image description here