Flutter 的 TextPainter 抛出一个 '!_needsLayout': is not true.'例外
Flutter's TextPainter throws an '!_needsLayout': is not true.' exception
我尝试使用 TextPainter
来获取 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.
使用 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;
}
完整文件
在调用 layout
之前,不会计算绘制文本的大小。这必须在访问任何与大小相关的属性之前完成,例如 didExceedMaxLines
.
有关详细信息,请参阅 API documentation。
我尝试使用 TextPainter
来获取 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.
使用 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;
}
完整文件
在调用 layout
之前,不会计算绘制文本的大小。这必须在访问任何与大小相关的属性之前完成,例如 didExceedMaxLines
.
有关详细信息,请参阅 API documentation。