前言
在Flutter开发中,我们经常会用到滚动视图,比如使用ListView来展示一个长列表,有时我们会有这样的需求:
当点击某个按钮的时候,需要自动定位到ListView列表的某一项,也可能不是ListView,比如是SingleChildScrollView或者是CustomScrollView,为滚动列表的各个模块(各模块高度根据内容自适应)添加锚点定位时,我们又该如何快速的定位到某个item呢?
关于ListView中的滚动定位,相信大家一定会想到ScrollController组件,没错,我们可以定义一个ScrollController对象与该ListView进行绑定,然后使用ScrollController对象的jumpTo(double offset)
方法就可以实现定位到某个位置了,但因为该方法的参数为double类型,也就意味着我们必须要知道要滚动到的位置在滑动方向上的偏移距离,当然了,如果列表中的每一项的高度都是相同的,那就很简单了,直接就可以计算出来,但实际情况并非这么简单,很多情况下列表的每一项的高度都是不确定的
,并且随时可能发生变化,这样我们也就无法事先知道每一项的高度,那如何实现定位到某个item的位置呢?如何精确的根据索引index
而不是偏移
定位到某个item呢?
本篇我们将详细介绍如何在ListView,SingleChildScrollView,CustomScrollView等滚动布局中简单快速的实现根据索引 index 定位到某个模块,同时适合各模块高度固定以及可变两种情况。