有点类似于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,);},)
