有点类似于canvas实现,把文本放到画布,限制最大宽度,计算出当前行数

    1. var span = TextSpan(
    2. text: text,
    3. );
    4. var tp = TextPainter(text: span, maxLines: 1);
    5. tp.textDirection = TextDirection.ltr;
    6. tp.layout(maxWidth: Adapt.px(710));
    7. if (tp.didExceedMaxLines) {
    8. // 超过行数限制
    9. }else {
    10. // 不超过
    11. }

    后续可以借用LayoutBuilder根据不同结果绘制不同的Widget

    1. LayoutBuilder(
    2. builder: (context, constraints) {
    3. var signature = context.select<UserHomeModel, dynamic>(
    4. (value) => value.userInfo.signature);
    5. var text =
    6. '个人签名:一起成为更好的自己~啊;开始较低拉技好的自己~啊;开始较低拉技技好的自己~啊;开始较低拉技技好的自己~啊;开始较低拉技';
    7. var textWidget = Text(
    8. text,
    9. style: TextStyle(color: Colors.white, fontSize: Adapt.px(26)),
    10. textAlign: TextAlign.left,
    11. maxLines: 2,
    12. overflow: TextOverflow.ellipsis,
    13. );
    14. var span = TextSpan(
    15. text: text,
    16. );
    17. var tp = TextPainter(text: span, maxLines: 1);
    18. tp.textDirection = TextDirection.ltr;
    19. tp.layout(maxWidth: Adapt.px(710));
    20. // 超过1行
    21. if (tp.didExceedMaxLines) {
    22. return Container(
    23. margin: EdgeInsets.only(top: Adapt.px(12)),
    24. constraints: BoxConstraints(maxWidth: Adapt.px(710)),
    25. child: textWidget);
    26. }
    27. // 不超过一行
    28. return Container(
    29. margin: EdgeInsets.only(top: Adapt.px(18)),
    30. constraints: BoxConstraints(maxWidth: Adapt.px(710)),
    31. child: textWidget,
    32. );
    33. },
    34. )