flutter 文本 更多 收起

项目中遇到需要跟小红书上面那样,当正文文字过多时,显示一个更多按钮,可以查看全文,收起按钮,显示指定行数文字。

在dart中,只有TextPainter 能判断当前文字的行数,所以单独写了一个判断的方法

 

// 当前是否已是 "全文" 状态
  bool mIsExpansion = false;

  //最大显示行数(默认 3 行)
  int mMaxLine = 3;
//_text:显示的文字 Widget _RichText(String _text) {
if (IsExpansion(_text)) { // //如果需要截断 if (mIsExpansion) { return Column( children: <Widget>[ new Text( _text, textAlign: TextAlign.left, ), Align( alignment: Alignment.centerLeft, child: FlatButton( onPressed: () { _isShowText(); }, child: Text("<收起"), textColor: SQColor.grey, ), ), ], ); } else { return Column( children: <Widget>[ new Text( _text, maxLines: 3, textAlign: TextAlign.left, overflow: TextOverflow.ellipsis, ), Align( alignment: Alignment.centerLeft, child: FlatButton( onPressed: () { _isShowText(); }, child: Text("全文>"), textColor: SQColor.grey, ), ), ], ); } } else { return Text( _text, maxLines: 3, textAlign: TextAlign.left, overflow: TextOverflow.ellipsis, ); } } bool IsExpansion(String text) { TextPainter _textPainter = TextPainter( maxLines: 3, text: TextSpan( text: text, style: TextStyle(fontSize: 16.0, color: Colors.black)), textDirection: TextDirection.ltr) ..layout(maxWidth: Screen.width, minWidth: Screen.width); if (_textPainter.didExceedMaxLines) {//这里判断 文本是否截断 return true; } else { return false; } } void _isShowText() { if (mIsExpansion) { //关闭了 setState(() { mIsExpansion = false; }); } else { setState(() { mIsExpansion = true; }); } }

 

转载于:https://www.cnblogs.com/hllxy/p/10840023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值