zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

Flutter开发 - 监听滑动列表(解决特殊列表严重占用内存问题),并在滑动时暂停动画,暂停还未完成的下载操作,列表停止后恢复

2023-09-11 14:21:22 时间

近日,见到有人遇到针对特殊列表滚动时占用内存严重导致闪退的问题,原因是没有对列表中的动画和加载的耗时操作做优化。我们知道,cell是重用的,没加载在屏幕上的cell内部是不会进行布局和任务处理的,而加载完的列表最多也就一屏,所以这个问题发生一定是在滑动的时候大量加载动画导致的。

知道了原因,我们只需要在滑动时控制动画的加载和暂停与否就可以优化这个列表。

在原生中这种优化比较常见,也不难,但出现的场景却颇为少见,接下来,我们针对原生思想来对这样一个列表做优化。

在网上搜索了下针对这个问题的博客,都是讲的监听,也是从官方那里拿来的,对于怎么使用讲解也比较浅薄,对于一个初学者来说不好下手,这也是这篇博客诞生的初衷,帮助初学者更好的学习监听列表状态,并解决一些优化问题。

ps:虽说这个东西简单,那也只是针对有丰富开发经验的人来说,对于一些入行几年的人,还是有些难度的。

方案一:

博主一开始想到的是通过ScrollController监听ListView的滑动偏移量,通过一个bool变量来控制全局的cell内显示,我们来看下效果:

在上图中发现了一个问题,暂停后,列表的状态并没有恢复,代码部分也没有执行,这明显不是我们想要的效果,通过打印偏移量发现没有规律可言,即使滑动速度慢的地方偏移量变化和速度快的地方差别也不大,所以不能作为依据来改变bool值,这套方案只