启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

Flutter瀑布流及通用列表解决方案

更新时间:2024-12-23 02:39:13

瀑布流及通用列表解决方案在Flutter中成为了解决复杂布局过程及基础能力扩充的热门话题。闲鱼业务中大量瀑布流场景的出现,使得使用原生的ListView和GridView显得捉襟见肘。社区中流行的瀑布流解决方案,主要基于SliverMultiBoxAdaptor进行自定义布局,但缺乏复用机制,导致在复杂场景下出现重复布局问题。这些解决方案在性能、生命周期管理、打点曝光等基础功能上仍有待完善。

为了应对这些挑战,我们迫切需要一个更加通用且能够解决复杂布局问题的同时增强基础能力的列表视图解决方案。在Flutter中,列表视图基于Scrollable、Sliver、和Viewport的布局体系进行构建。Scrollable负责监听手势输入,Viewport则作为管理多Sliver的容器,Sliver负责具体的布局计算。

瀑布流的实现逻辑依赖于继承SliverMultiBoxAtaptor,充分利用其将SliverConstraints转换为BoxConstraints的能力,并借助SliverBoxChildManager实现Child的懒加载。瀑布流的核心逻辑围绕三个关键点展开,即Child的顺序布局、边缘Child的管理以及离屏Child的清理。通过记录和管理Child的ParentData,瀑布流能够按照顺序进行布局,优化性能并实现精确的生命周期管理和曝光打点。

然而,瀑布流的底层渲染逻辑过于底层,不利于业务方进行定制。此外,缺乏复用机制导致复杂视图层级下性能下降。我们借鉴了Native的思路,将整体容器划分为三部分:Delegate负责Child生命周期和手势响应、Layout负责布局所有Child、而Reuser在RenderObject层面实现Child类型的复用与局部更新。尽管在开发过程中遇到了一些挑战,如信息传递方式与Native的不一致,但我们正积极寻求解决方法,并期待在后续的文章中与大家分享更多进展。

在性能数据方面,应用于主搜索页的瀑布流解决方案相较于原生实现了约1.5帧的提升。尽管内存使用略有增加,但整体性能表现良好。展望未来,Flutter列表视图仍有改进空间,如瀑布流中的scrollTo(int index)功能、内存管理等问题。闲鱼在Flutter化的道路上仍有很长的路要走,我们将持续优化并探索更高效、更灵活的解决方案。

多重随机标签

猜你喜欢文章

QQ客服 电话咨询