如何获取文本行数 在我们的 Flutter 项目中,我们需要判断文本行数是否超过 3 行,然后我们会显示提示信息。我们如何使用代码来实现呢?
最佳答案
如果你只是想知道文本包含多少内在行,你可以做一个简单的
final numLines = '\n'.allMatches(yourText).length + 1;
但是,我猜您对实际显示的行数更感兴趣。
在这里,事情变得有点复杂,因为您需要知道可用空间(BoxConstraints
)才能计算文本需要多少行。
为此,您可以使用 LayoutBuilder
来延迟小部件的构建,并使用 TextPainter
来进行实际计算:
return LayoutBuilder(builder: (context, constraints) {
final span = TextSpan(text: yourText, style: yourStyle);
final tp = TextPainter(text: span);
tp.layout(maxWidth: constraints.maxWidth);
final numLines = textPainter.computeLineMetrics().length;
if (numLines > 3) {
// TODO: display the prompt message
return ColoredBox(color: Colors.red);
} else {
return Text(yourText, style: yourStyle);
}
});
我从 auto_size_text
pub package 中提取了一些代码。 ,这对您来说可能也很有趣:
它调整文本大小,使其适合给定的空间。
无论如何,在显示提示时要小心:
您的小部件的 build
方法可能每秒被调用多次,从而导致同时显示多个提示。
注意:computeLineMetrics()
函数是在答案的初始版本之后添加的。这就是为什么此答案的先前版本使用 TextPainter(text: span, maxLines: 3)
然后检查是否 tp.didExceedMaxLines
。
https://stackoverflow.com/questions/54091055/
相关文章:
android - Flutter 检索 ro.product.cpu.abi 的设备属性时出错
flutter - 在 AWS Device Farm、Saucelabs、Firebase 测试实
flutter - 展开 Flutter 中的应用栏以允许多行标题?
flutter - 如何在 Flutter 中使用音频播放器插件播放本地 mp3 文件
visual-studio - 是否可以在 Visual Studio 2017 IDE 上设置 f
dart - pubspec.yaml 中的配置标志如何工作?
flutter - 像 SliverAppBar 一样隐藏 TabBar