为了实现在Flutter中在列表中添加新项目时保持滚动位置,可以使用ListView组件和ScrollController。ListView是一个支持滚动的可滚动组件,而ScrollController是一个控制滚动位置的控制器。 首先,需要创建一个ScrollController对象,并将其传递给ListView组件的controller属性。然后,在添加新项目时,可以使用ScrollController的positi...
ListView.builder 里的ScrollController ScrollController({doubleinitialScrollOffset = 0.0,//初始滚动位置bool keepScrollOffset =true,//是否保持滚动位置String? debugLabel,//调试标签String? name,//标识符ScrollPosition? initialScrollPosition,//初始滚动位置对象ScrollPhysics? physics,//滚动物理行为ScrollController?
当ScrollController和可滚动组件关联时,可滚动组件首先会调用ScrollController的createScrollPosition()方法来创建一个ScrollPosition来存储滚动位置信息,接着,可滚动组件会调用attach()方法,将创建的ScrollPosition添加到ScrollController的positions属性中,这一步称为“注册位置”,只有注册后animateTo()和jumpTo()才可以被调用。
);voidattach(ScrollPosition position) ;voiddetach(ScrollPosition position) ; 当ScrollController和Scrollable Widget关联时,Scrollable Widget首先会调用ScrollController的createScrollPosition()方法来创建一个ScrollPosition来存储滚动位置信息,接着,Scrollable Widget会调用attach()方法,将创建的ScrollPosition添加到ScrollControl...
child: ListView( controller: _scrollController, /// 设置上拉加载更多 children: _buildList(), ), 1. 2. 3. 4. 5. 三、ScrollController 判定滑动到底部 调用_scrollController.position.pixels 可以获取当前滚动的像素点 ; 调用_scrollController.position.maxScrollExtent 可以获取当前最大可滚动位置 ; ...
如果ListView比较长的话,直接listScrollController.position.maxScrollExtent是只能滚到距离最底有一定距离的地方。 原理贴在最后。 方法0:加上额外的滚动距离 缺点:iOS和web上会有严重的反弹效果,并且效果期间无法操作。 方法1:Scrollable.ensureVisible(BuildContext) ...
前面我们主要在触摸开始时,判断需要响应的对象时ListView还是PageView,然后通过_activeScrollController保存当然响应对象,并且通过 Controller 生成用于响应手势信息的Drag对象。 简单说:滑动事件发生时,默认会建立一个Drag用于处理后续的滑动事件,Drag会对原始事件进行加工之后再给到ScrollPosition去触发后续滑动效果。
ScrollPosition position, Tolerance tolerance, double velocity, double leading, ) { double page = _getPage(position, leading); if (position.pixels < 0) { return 0; } if (position.pixels >= maxSize) { return maxSize; } if (position.pixels > 0) { ...
CustomScrollView 非常强大,如我们可以把 ListView 和 GridView 组装在一起,也可以拼装其他的 Sliver Widget,实现更复杂的效果。 我们看下 CustomScrollView 的构造方法: const CustomScrollView({ Key key, // 滚动方向 Axis scrollDirection = Axis.vertical, ...
前面我们主要在触摸开始时,判断需要响应的对象时ListView还是PageView,然后通过_activeScrollController保存当然响应对象,并且通过 Controller 生成用于响应手势信息的Drag对象。 简单说:滑动事件发生时,默认会建立一个Drag用于处理后续的滑动事件,Drag会对原始事件进行加工之后再给到ScrollPosition去触发后续滑动效果。