我的应用程序中有文本,我想随着时间的推移使用不同的颜色。我通过使用 RichText 小部件来做到这一点,每个字符都有一个单独的文本跨度和一个计时器,然后将更新状态并适当地重新绘制所有文本跨度。只要文本不太长,它就可以工作。它开始在大约 7-10k 个字符的文本中中断。
为了优化这一点,我决定使用 VisibilityDetector 库,因为不可见的文本不需要使用不同的颜色。因此,我将文本分块并将每个块放入其自己的可见性检测器中,当它不可见时,我只需使用 Text 小部件设置文本。这可行,但由于它们是单独的小部件,因此一行将在中途被切断并从下一行开始。
我想做的是将 TextSpan 作为 VisibilityDetector 的子项传递,但这会产生错误TextSpan is not a subtype of the type Widget
。有什么办法可以做我想做的事吗?
这是我想要的小部件树类型:
String myText = '';
RichText(
text: TextSpan(
children: myText.chunk().mapIndexed((chunkIndex, chunkText) {
return WidgetSpan(
child: VisibilityDetector(
onVisibilityChanged: (info) => _handleVisibilityChanged(),
child: !chunkIsVisible ?
Text(chunkText) :
TextSpan( //This breaks because its not a subtype of Widget
children: chunkText.characters.mapIndexed((charIndex, char) {
return TextSpan(
text: char,
style: _styleTextBasedOnIndex((chunkIndex * ChunkSize) + charIndex)
)
}
)
)
)
}
)
)