createBallisticSimulation method

  1. @override
Simulation createBallisticSimulation(
  1. ScrollMetrics position,
  2. double velocity

Returns a simulation for ballistic scrolling starting from the given position with the given velocity.

This is used by ScrollPositionWithSingleContext in the ScrollPositionWithSingleContext.goBallistic method. If the result is non-null, ScrollPositionWithSingleContext will begin a BallisticScrollActivity with the returned value. Otherwise, it will begin an idle activity instead.

The given position is only valid during this method call. Do not keep a reference to it to use later, as the values may update, may not update, or may update to reflect an entirely unrelated scrollable.


Simulation createBallisticSimulation(
    ScrollMetrics position, double velocity) {
  // If we're out of range and not headed back in range, defer to the parent
  // ballistics, which should put us back in range at a page boundary.
  if ((velocity <= 0.0 && position.pixels <= position.minScrollExtent) ||
      (velocity >= 0.0 && position.pixels >= position.maxScrollExtent))
    return super.createBallisticSimulation(position, velocity);

  final Tolerance tolerance = this.tolerance;
  final portion = (position.extentInside - itemDimension) / 2;
  final double target =
      _getTargetPixels(position, tolerance, velocity, portion);
  if (target != position.pixels)
    return ScrollSpringSimulation(spring, position.pixels, target, velocity,
        tolerance: tolerance);
  return null;