SpringSimulator constructor
SpringSimulator({
- required TickerProvider vsync,
- required SpringConfiguration configuration,
- 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();
}