dart - Flutter:如何获取文本行数

如何获取文本行数 在我们的 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 中的应用栏以允许多行标题?

date - 如何在 flutter 中创建计时器选择器?

flutter - 如何在 Flutter 中使用音频播放器插件播放本地 mp3 文件

visual-studio - 是否可以在 Visual Studio 2017 IDE 上设置 f

dart - pubspec.yaml 中的配置标志如何工作?

flutter - 像 SliverAppBar 一样隐藏 TabBar

dart - 如何在 Flutter 中添加文件选择器插件?

firebase - 如何通过与 Flutter Cloud Firestore 插件中的日期进行比