SpringSimulator constructor

SpringSimulator({
  1. required TickerProvider vsync,
  2. required SpringConfiguration configuration,
  3. double? initialLength,
})

Implementation

SpringSimulator({
  required this.vsync,
  required this.configuration,
  double? initialLength,
}) : _state = SpringState(
        length: initialLength ?? 0,
        force: 0,
        velocity: 0,
      ) {
  _ticker = vsync.createTicker((elapsed) {
    final displacement = _state.length;
    final force = (-configuration.k) * displacement;

    final acceleration = force / configuration.mass;

    // Not sure if this correct (adding acceleration and velocity)
    var deltaPosition = (_state.velocity + acceleration);

    if (deltaPosition.abs() < 0.001) {
      deltaPosition = 0.0;
    }

    final updatedLength = _state.length + deltaPosition;
    _state.velocity +=
        acceleration + -(configuration.damping * _state.velocity);

    if (updatedLength != _state.length) {
      _state.length = updatedLength;
      _listeners.forEach((listener) => listener(_state));
    }
  });
  _ticker.start();
}