dart 允许辅助功能屏幕阅读器使用语义逐个读取数字字符串作为数字[flutter]

14ifxucb  于 12个月前  发布在  Flutter
关注(0)|答案(2)|浏览(132)

我正在使用Semantics来调整我的应用程序的可访问性,并希望读取电话号码(例如:Text("950874123"))一对一,而不是“百万,千…”。有什么办法吗?

58wvjzkj

58wvjzkj1#

我看到这个问题已经问了一段时间了,但我遇到了同样的问题。我在这里添加我的解决方案来帮助下一个人。
我在这个页面的帮助下得到了解决方案:https://medium.com/theotherdev-s/mastering-flutter-semantics-672440bc8bc8
基本上,我的解决方案是使用Semantics标签(我可以控制)并使用ExcludeSemantics来排除我正在阅读的文本。在标签中,我将所有内容划分为一个数组,并将其转换为字符串。这使得屏幕阅读器将所有内容视为单个数字。
这里有一个例子

Semantics(
   label: numberString.split("").toString(),
      child: ExcludeSemantics(
         excluding: true,
            child: Text(numberString),          
             )
 )
  • 编辑:在对代码进行了更多的尝试之后,我意识到Text字段有一个名为“semanticsLabel”的属性,您可以在其中做同样的事情。我留下了上面的例子,因为它可以用于其他小部件类型,而不仅仅是Text()

下面是代码的样子:

Semantics(
   child: Text(
      viewModel.confirmationId,
      semanticsLabel:numberString.split("").toString(),
    )
)

(此外,父“语义”小部件可能不需要。标签将直接与文本小部件一起使用)

zaqlnxep

zaqlnxep2#

我在显示信用卡的最后4位数字时遇到了类似的问题。我的解决方案:

TextSpan(
    text: ' ending in ${paymentMethod.last4}',
    semanticsLabel: 'ending in ${(paymentMethod.last4 ?? '').characters.join(',').toString()}',
    style: Theme.of(context).textTheme.bodyLarge,
),

相关问题