有没有办法在渲染之前计算文本宽度?

e-j*_*-j5 4 flutter

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

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

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

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

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

例如

      height: Theme.of(context).textTheme.headline6.fontSize * title.length > 300? 72 : 60
Run Code Online (Sandbox Code Playgroud)

e-j*_*-j5 9

这是答案

  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;
Run Code Online (Sandbox Code Playgroud)

  • 如果您对“TextDirection.ltr”有问题,请使用“import 'dart:ui' as ui;”,然后使用“ui.TextDirection.ltr” (2认同)