首页 > 解决方案 > 有没有办法在渲染之前计算文本宽度?

问题描述

我有一个固定大小的盒子,我需要传递高度值。

在框内,我有一个可能溢出的 Text 小部件,因此我需要设置 'maxLines' 2。但是,由于框高度是固定的,因此 Text 小部件不会占用 2 行。

我可以将更大的值传递给框的高度,但如果 Text 小部件只占用 1 行,它看起来不太好。

如果我可以计算 Text 小部件的总像素然后通过将其与固定大小框的宽度进行比较来计算出需要多少行 Text 小部件,那就太好了。

    SizedBox(
      child: Text(
        title,
        style: Theme.of(context).textTheme.headline6,
        maxLines: 2,
      ),
      width: 300,
      height: 60,
    ),

例如

      height: Theme.of(context).textTheme.headline6.fontSize * title.length > 300? 72 : 60

标签: flutter

解决方案


这是答案

  Size calcTextSize(String text, TextStyle style) {
    final TextPainter textPainter = TextPainter(
      text: TextSpan(text: text, style: style),
      textDirection: TextDirection.ltr,
      textScaleFactor: WidgetsBinding.instance.window.textScaleFactor,
    )..layout();
    return textPainter.size;
  }

final double textWidth = calcTextSize(text, TextStyle(fontSize: fontSize)).width;

推荐阅读