我有一个 REST 应用程序,它从站点获取逐页信息并将其转换为 ListView 列表。当到达滚动结束时触发需要接收新部分数据的事件,看起来像这样
_controller.addListener(() {
//При достижении конца прокрутки
if (_controller.position.atEdge) {
//Запрашиваю новую порцию данных
}
});
我希望数据不是在屏幕的最后被请求,而是更早一点,这样用户就不必等待新的数据部分加载,它们会在后台被抽出。为此,我尝试了此选项
_controller.addListener(() {
//Сравниваю текущую позицию скролинга списка с максимальной минус какоё-то значение, что-бы срабатывало заранее
if (_controller.position.pixels >= _controller.position.maxScrollExtent-200) {
//Запрашиваю новую порцию данных
}
});
也就是说,它确定了当前的滚动位置,并将其与最大的位置进行比较,但要早一点,相差 200 像素。这个选项不起作用,因为返回JSON数据的函数是异步工作的,并且事件触发多次,你在几秒钟内得到10-15个请求,这些请求是随机处理的,不严格的顺序,并且数据是混合的因为这
我尝试了该选项_controller.position.pixels == _controller.position.maxScrollExtent-200,但它根本不起作用,因为当前位置的滚动非常准确,根本不可能进入这个值,事件根本不起作用。有没有办法让事件在列表的某个部分提前触发一次,在它完成之前,一种延迟加载?
应该按您的需要工作(可能需要在加载数据时完成。可能需要设置计时器):