有点类似于canvas实现,把文本放到画布,限制最大宽度,计算出当前行数
var span = TextSpan(
text: text,
);
var tp = TextPainter(text: span, maxLines: 1);
tp.textDirection = TextDirection.ltr;
tp.layout(maxWidth: Adapt.px(710));
if (tp.didExceedMaxLines) {
// 超过行数限制
}else {
// 不超过
}
后续可以借用LayoutBuilder根据不同结果绘制不同的Widget
LayoutBuilder(
builder: (context, constraints) {
var signature = context.select<UserHomeModel, dynamic>(
(value) => value.userInfo.signature);
var text =
'个人签名:一起成为更好的自己~啊;开始较低拉技好的自己~啊;开始较低拉技技好的自己~啊;开始较低拉技技好的自己~啊;开始较低拉技';
var textWidget = Text(
text,
style: TextStyle(color: Colors.white, fontSize: Adapt.px(26)),
textAlign: TextAlign.left,
maxLines: 2,
overflow: TextOverflow.ellipsis,
);
var span = TextSpan(
text: text,
);
var tp = TextPainter(text: span, maxLines: 1);
tp.textDirection = TextDirection.ltr;
tp.layout(maxWidth: Adapt.px(710));
// 超过1行
if (tp.didExceedMaxLines) {
return Container(
margin: EdgeInsets.only(top: Adapt.px(12)),
constraints: BoxConstraints(maxWidth: Adapt.px(710)),
child: textWidget);
}
// 不超过一行
return Container(
margin: EdgeInsets.only(top: Adapt.px(18)),
constraints: BoxConstraints(maxWidth: Adapt.px(710)),
child: textWidget,
);
},
)