zoukankan      html  css  js  c++  java
  • 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; }); } }
  • 相关阅读:
    Flasback数据库(闪回数据库)
    Oracle回收站
    PL/SQL中如何执行DDL、SCL?
    oracle中的隐式提交(auto commit)
    raise_application_error用法
    sqlplus中"-S"和"-L"用法
    愿随君,走天涯
    你的过去,我不曾参与;你的未来,与你紧相依
    Oracle中SAVEPOINT和ROLLBACK用法
    Linux基础命令-Nginx-正则表达式( grep sed awk )-Shell Script--etc
  • 原文地址:https://www.cnblogs.com/hllxy/p/10840023.html
Copyright © 2011-2022 走看看