Flutter ViewPage 滚动从尾页自动回到首页

168 阅读1分钟

一、自定义ViewPage的physics属性

  • 自定义CirclePageScrollPhysics类 继承自 PageScrollPhysics类
  • 重写createBallisticSimulation方法,position表示当前滑动位置,velocity表示当前滑动速度
  • 增加判断:如果当前速度大于0,且滑动距离已超过最大滚动距离,则重置滚动状态到起点
  • 示例:
class CirclePageScrollPhysics extends PageScrollPhysics {
  const CirclePageScrollPhysics({ScrollPhysics parent}) : super(parent: parent);

  @override
  PageScrollPhysics applyTo(ScrollPhysics ancestor) {
    return CirclePageScrollPhysics(parent: ancestor);
  }

  @override
  Simulation createBallisticSimulation(
      ScrollMetrics position, double velocity) {
    if (velocity > 0 && position.pixels >= position.maxScrollExtent) {
      return ScrollSpringSimulation(spring, 0, 0, 0, tolerance: tolerance);
    }
    return super.createBallisticSimulation(position, velocity);
  }
}
  • 设置physics属性:
PageView(
    physics: CirclePageScrollPhysics(),
)
  • Hot Reload.