1 获取文本被截断的时候最后一个文字的index
class TextUtil {
/// 获取最大行文字字数
static int calculateTextMaxTextPos(String value, double fontSize,
{required double fontHeight, required double maxWidth, required EdgeInsetsGeometry padding, int maxLines = 3}) {
final TextPainter painter = TextPainter(
locale: WidgetsBinding.instance.window.locale,
textDirection: TextDirection.ltr,
maxLines: maxLines,
strutStyle: StrutStyle(forceStrutHeight: true, fontSize: fontSize, height: fontHeight),
text: TextSpan(
text: value,
style: TextStyle(
height: fontHeight,
fontSize: fontSize,
),
),
textAlign: TextAlign.center);
painter.layout(maxWidth: maxWidth - padding.horizontal);
final didExceedMaxLines = painter.didExceedMaxLines;
// print('是否超出最大行$didExceedMaxLines');
if (didExceedMaxLines) {
final position = painter.getPositionForOffset(Offset(
painter.width,
painter.height,
));
return position.offset;
}
return 0;
}
}
2 计算文本尺寸
TextSpan span = TextSpan(
text: item,
style: TextStyle(
color: color,
fontWeight: FontWeight.bold,
fontSize: maxFontSize - Random().nextInt(10)));
TextPainter painter = TextPainter(text: span, textDirection: TextDirection.ltr);
painter.layout();
var width = painter.width;
var height = painter.height;