Flutter 的 TextPainter 抛出一个 '!_needsLayout': is not true。例外

Tob*_*aut 3 android dart flutter flutter-android

我尝试使用 aTextPainter来获取 Text Widget 中字符串的最大长度,但是如果我调用 Painter,它会抛出!_needsLayout': is not true.异常。

例外

The following assertion was thrown building FeedPage(dirty, dependencies: [MediaQuery], state: _FeedPageState#9c489):
'package:flutter/src/painting/text_painter.dart': Failed assertion: line 546 pos 12: '!_needsLayout': is not true.
Run Code Online (Sandbox Code Playgroud)

使用 TextPainter 的方法

int maxCharCountToFit(String content) {
    List<String> splitted = content.split(" ");

    for (int i = splitted.length; i >= 0; i--) {
      bool retry = TextPainter(
            text: TextSpan(text: splitted.sublist(0, splitted.length - i).join(" "), style: pageTextStyle),
            maxLines: 25,
            textScaleFactor: MediaQuery.of(context).textScaleFactor,
            textDirection: TextDirection.ltr,
          ).didExceedMaxLines ==
          false;

      if (retry == false) {
        return splitted.sublist(0, i).length;
      }
    }

    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

完整文件

在 GitHub 上查看此文件

hac*_*024 5

在您调用 之前,不会计算绘制文本的大小layout。这必须在访问任何与大小相关的属性(如didExceedMaxLines.

有关更多信息,请参阅API 文档