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

问题描述 投票:0回答:2

我正在使用

Semantics
来调整我的应用程序的可访问性,并且想要一对一地读取电话号码(例如:
Text("950874123")
)而不是“百万,千......”。有什么办法可以做到吗?

flutter dart accessibility screen-readers
2个回答
0
投票

我看到不久前有人问过这个问题,但我遇到了同样的问题。我在这里添加我的解决方案以帮助下一个人。

我在此页面的帮助下得到了解决方案: https://medium.com/theotherdev-s/mastering-flutter-semantics-672440bc8bc8

基本上,我的解决方案是使用语义标签(我可以控制)并使用排除语义来排除我正在阅读的文本。在标签中,我将所有内容划分为一个数组,然后将其转换为字符串。这使得屏幕阅读器将所有内容视为单独的数字。

这是一个例子

Semantics(
   label: numberString.split("").toString(),
      child: ExcludeSemantics(
         excluding: true,
            child: Text(numberString),          
             )
 )

*编辑: 在对代码进行了更多研究之后,我意识到文本字段有一个名为“semanticsLabel”的属性,您可以在其中执行相同的操作。我留下了上面的例子,因为它可以用于其他小部件类型,而不仅仅是 Text()

这就是代码的样子:

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

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


0
投票

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

TextSpan(
    text: ' ending in ${paymentMethod.last4}',
    semanticsLabel: 'ending in ${(paymentMethod.last4 ?? '').characters.join(',').toString()}',
    style: Theme.of(context).textTheme.bodyLarge,
),
© www.soinside.com 2019 - 2024. All rights reserved.