最近有个需求,历史搜索记录需要限制行数,心情愉悦看了下Wrap, 发现竟然没属性支持限制行数,不由感叹了下,flutter真辣鸡
一、翻阅 Wrap 源码
Wrap代码包含两部分:Widget类Wrap和RenderBox类RenderWrap。Widget大家都很熟悉的, 基本上天天在撸的代码都是Widget, 而RenderWrap负责背后 layout、paint等。也就是传说中三棵树中第三棵。
RenderWrap中 perfromLayout 方法主要负责child的布局, 查看源码 可以看到它主要是遍历child, 确定child最终位置。
所以,针对这个功能主要是修改这一部分代码,增加相关逻辑即可
二、修改代码
1、对于超过最大行数的child, 直接layout 它的宽高都为0
2、如果child数量不足,那么隐藏 收起/展开 widget
3、针对于加上收起widget宽度超过最大行数后,直接把最大行最后一个child layout 为0
三、源码及Demo
extended_wrap
四、优化
目前代码仅为了实现功能, 实现方式比较简单粗暴。后续优化
五、demo效果如下