Flutter 分割组件Divider

Flutter 分割组件Divider,第1张

Divider的构造方法

可以看出Divider组件只有5个属性,一目了然,使用也非常简单

indent: 起点缩进距离

endIndent: 终点缩进距离

color: 分割线颜色

height: 分割线区域的高度,并非分割线的高度

thickness: 分割线的厚度,真正的分割线的高度

注意:

1.当height为null的时候会去查看 DividerThemeData.space的高度,如果同样为null,则默认分割线区间为16

2.如果不设置thickness的高度,分割线默认为1px且居中显示

3.如果想设置真实的分割线高度,需要把height和thickness设置为一样高即可。

4.flutter还提供了竖直方向上的分割线组件VerticalDivider,用法一至,不在赘述。

Demo

控件的package我已经托管到了 pub仓库

如果你被墙住了,也可以看 国内镜像

使用方式就是在你的flutter pubspec.yaml中添加依赖:

然后flutter packages get更新依赖即可

最近写demo时发现Flutter自带的ListView widget很简陋,没有分隔线,没有section/row之分,也没有sectionHeader,如果要实现一个有分割线,有section区分,有section header的ListView,耦合会非常严重:

在 https://pub.dartlang.org 上没有找到封装好的这种TableView,于是乎决定自己写一个,命名为SectionTableView

本人是iOS开发,所以习惯了iOS上的UITableView的调用风格,所以在实现flutter的SectionTableView时,决定实现如下功能

为了实现这些功能,并且方便后期增加滚动功能,上下拉刷新功能,使用了StatefulWidget作为父类:

接着在对应的_SectionTableViewState中的build方法中,返回ListView:

熟悉flutter ListView的同学知道,ListView的builder类方法,有一个itemBuilder回调函数,参数是当前的上下文,和将要渲染的行索引index,index对应想要获取的某一行控件(cell或者叫ListItem),返回非空的组件就证明这个index有值,返回null就表示列表到尽头了。

我们需要做的就是对index进行映射,判断当前index对应的控件,应该是列表里的section header,还是分隔线devider,还是某一行的真正内容cell。

出于性能的考虑,不可能每次调用 _buildCell的时候,都计算一遍index对应的section和row的位置,所以定义了一个类成员变量indexPathSearch,是数组,数组长度就是ListView所有的行,当 _buildCell 的参数index大于等于indexPathSearch的长度的时候,就返回null,表示列表内容到此为止了。

indexPathSearch里每一个元素,就是index对应的section和row(称为indexPath),index指向实际行(cell)的时候,section和row都是大于等于0的,当section大于等于0,row==-1的时候,表示这里是一个section header,当两者都等于-1的时候,表示这里是一个分割线:

计算好了index到indexPath的映射,剩下的就好说了,在_buildCell中,提取indexPath并判断indexPath的内容,返回对应的控件:

这是我的第一个flutter package,目前还很简陋,flutter目前尚且如此,所以大家一起改善它,

下一步将优化如下内容:

如果大家喜欢,请多多star我的 项目GitHub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11795594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存