computeScroll method
void
computeScroll()
Implementation
void computeScroll() {
if (_decelerationVelocity.x == 0 && _decelerationVelocity.y == 0) {
return;
}
int currentTime = DateTime.now().millisecondsSinceEpoch;
if (_decelerationLastTime == 0) {
_decelerationLastTime = currentTime;
} else {
_decelerationVelocity.x *= _dragDecelerationFrictionCoef;
_decelerationVelocity.y *= _dragDecelerationFrictionCoef;
double timeInterval = (currentTime - _decelerationLastTime) / 1000;
double distanceX = _decelerationVelocity.x * timeInterval;
double distanceY = _decelerationVelocity.y * timeInterval;
double dragDistanceX = dragXEnabled ? distanceX : 0;
double dragDistanceY = dragYEnabled ? distanceY : 0;
painter!.translate(dragDistanceX, dragDistanceY);
_decelerationLastTime = currentTime;
}
if (_decelerationVelocity.x.abs() >= 20 ||
_decelerationVelocity.y.abs() >= 20) {
state.setStateIfNotDispose();
Future.delayed(const Duration(milliseconds: 16), () {
computeScroll();
});
} else {
painter!.calculateOffsets();
state.setStateIfNotDispose();
stopDeceleration();
}
}