有没有一种方法可以在渲染前计算文本宽度?

时间:2020-11-03 13:07:27

标签: flutter

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

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

我可以将较大的值传递给框的高度,但是如果“文本”小部件仅占用1行,则看起来不太好。

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

    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

1 个答案:

答案 0 :(得分:0)

这是答案

  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;