前一篇博客介绍了 Flutter 中常用的可滚动组件,也说过可以用ScrollController
来控制可滚动组件的滚动位置,本节先介绍一下ScrollController
,然后以ListView
为例,展示一下ScrollController
的具体用法。最后,再介绍一下路由切换时如何来保存滚动位置。
一、ScrollController
ScrollController
构造函数如下:
ScrollController({
double initialScrollOffset = 0.0, //初始滚动位置
this.keepScrollOffset = true,//是否保存滚动位置
...
})
我们介绍一下ScrollController
常用的属性和方法:
offset
:可滚动组件当前的滚动位置。jumpTo(double offset)
、animateTo(double offset,...)
:这两个方法用于跳转到指定的位置,它们不同之处在于,后者在跳转时会执行一个动画,而前者不会。
ScrollController
还有一些属性和方法,我们将在后面原理部分解释。
1.1 滚动监听
ScrollController
间接继承自Listenable
,我们可以根据ScrollController
来监听滚动事件,如:
controller.addListener(()=>print(controller.offset))
1.2 实例
我们创建一个ListView
,当滚动位置发生变化时,我们先打印出当前滚动位置,然后判断当前位置是否超过1000像素,如果超过则在屏幕右下角显示一个“返回顶部”的按钮,该按钮点击后可以使ListView恢复到初始位置;如果没有超过1000像素,则隐藏“返回顶部”按钮。代码如下: