flutter 评论盖楼实现

先上图:  less

 

经过观察咱们能够发现最外层是3楼等于3楼本身的内容加2楼,而2楼等于内容加一楼,1楼就只有内容。而后咱们发现一个规律:本楼=内容+上楼,1楼没有上一楼怎么办?在 flutter 中很简单了,就是一个 Widget,咱们能够作个判断,若是是一楼那么他的上楼就是一个不占空间的 Widget。楼层就盖起来那就要用到一个for循环:ide

Widget referWidget;
for(int index = 0; index < referCount; index++){
  referWidget = buildRefer(refers.elementAt(index), index, index==0?emptyWidget:referWidget);
}

在 buildRefer 中第一个参数是当前评论内容,第二下标用来显示当前楼层数,第三个就是上一楼,这里能够看到前面听说的判断第一楼时的上楼为空放一个空 Widget。下面是关键代码:ui

class CommentReferWidget extends StatelessWidget {
  final List<OscProjectCommentRefer> refers;
  const CommentReferWidget({Key key, this.refers}) : super(key: key);


  @override
  Widget build(BuildContext context) {
    int referCount = refers?.length??0;
    Widget emptyWidget = Divider(color: Colors.transparent, height: 0,);
    if(referCount > 0) {
      Widget referWidget;
      for(int index = 0; index < referCount; index++){
        referWidget = buildRefer(refers.elementAt(index), index, index==0?emptyWidget:referWidget);
      }
      return referWidget;
    } else {
      return emptyWidget;
    }
  }

  Widget buildRefer(OscProjectCommentRefer refer, int index, Widget referWidget){
    return Container(
      padding: EdgeInsets.symmetric(horizontal: Dimens.gap_view_smaller, vertical: Dimens.gap_view_smaller),
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black12, width: Dimens.gap_divider_height_smallest),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          referWidget,
          buildReferContent(refer, index),
        ],
      ),
    );
  }

  Widget buildReferContent(OscProjectCommentRefer refer, int index){
    return Padding(
      padding: EdgeInsets.symmetric(horizontal: Dimens.gap_view_small, vertical: Dimens.gap_view_small),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text(" ${index+1}  ", style: MyTextStyle.COMMENT_REFER_INDEX,),
          Expanded(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text("${refer.author}", style: MyTextStyle.COMMENT_REFER_AUTHOR,),
                Offstage(
                  offstage: StringUtil.isEmpty(refer.pubDate),
                  child: Text("${refer.pubDate}", style: MyTextStyle.COMMENT_REFER_TIME,),
                ),
                Text(refer.content, style: MyTextStyle.LIST_ACTIVITY_CONTENT),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

引用到其余格式文件就不放了,能够本身随便写一个。this

以上。spa

相关文章
相关标签/搜索