📝

【Flutter】Text Widgetの行数を数える

に公開

改行コードの数を数えるのではなく、実際に表示されているテキスト(Text Widget)の行数を取得します。例えば以下の折り返されたテキストの場合は2行と数えます。

行数の取得

TextPainterにTextウィジェットと同じテキストやスタイルを渡せば行数を取得できます。

  int getTextLinesLength(
      String text, TextStyle style, int maxLines, double maxWidth) {
    final tp = TextPainter(
        text: TextSpan(text: text, style: style),
        textDirection: TextDirection.ltr,
        maxLines: maxLines);
    tp.layout(maxWidth: maxWidth);
    return tp.computeLineMetrics().length;
  }

text,style,maxLinesはTextウィジェットと同じものを渡します。

maxWidthに関しては、LayoutBuilderを使って親ウィジェットのサイズをmaxWidthとすれば基本的に問題ないと思います。

LayoutBuilder(builder: (context, size) {
  int maxLines = 2;
  TextStyle style =
      TextStyle(fontSize: 50);
  //行数
  int lines = getTextLinesLength(
      title,
      style,
      maxLines,
      size.maxWidth);
  return Text(title,
      style: style, maxLines: maxLines);
})

参考

Discussion