我正在使用
Semantics
来调整我的应用程序的可访问性,并且想要一对一地读取电话号码(例如:Text("950874123")
)而不是“百万,千......”。有什么办法可以做到吗?
我看到不久前有人问过这个问题,但我遇到了同样的问题。我在这里添加我的解决方案以帮助下一个人。
我在此页面的帮助下得到了解决方案: 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(),
)
)
(此外,可能不需要父“语义”小部件。标签将直接与文本小部件一起使用)
在显示信用卡的最后 4 位数字时,我遇到了类似的问题。我的解决方案:
TextSpan(
text: ' ending in ${paymentMethod.last4}',
semanticsLabel: 'ending in ${(paymentMethod.last4 ?? '').characters.join(',').toString()}',
style: Theme.of(context).textTheme.bodyLarge,
),