flutter TextPainter 获取文本被截断的时候最后一个文字的index / 计算文本宽度

383 阅读1分钟

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;