先上图: 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