1. override
void update(double dt)

Called before a frame is drawn.

Override this method to do any updates to the node or node tree before it's drawn to screen.

// Make the node rotate at a fixed speed
void update(double dt) {
  rotation = rotation * 10.0 * dt;
}

Source

@override
void update(double dt) {
  // TODO: Fix this (it's a temp fix for low framerates)
  if (dt > 0.1) dt = 0.1;

  // Create new particles
  double rate = 1.0 / emissionRate;

  if (_particles.length < maxParticles) {
    _emitCounter += dt;
  }

  while(_particles.length < maxParticles
     && _emitCounter > rate
     && (numParticlesToEmit == 0 || _numEmittedParticles < numParticlesToEmit)) {
    // Add a new particle
    _addParticle();
    _emitCounter -= rate;
  }

  // _elapsedTime += dt;

  // Iterate over all particles
  for (int i = _particles.length -1; i >= 0; i--) {
    _Particle particle = _particles[i];

    // Manage life time
    particle.timeToLive -= dt;
    if (particle.timeToLive <= 0) {
      _particles.removeAt(i);
      continue;
    }

    // Update the particle

    if (particle.accelerations != null) {
    // Radial acceleration
    Vector2 radial;
      if (particle.pos[0] != 0 || particle.pos[1] != 0) {
        radial = new Vector2.copy(particle.pos)..normalize();
      } else {
        radial = new Vector2.zero();
      }
      Vector2 tangential = new Vector2.copy(radial);
      radial.scale(particle.accelerations.radialAccel);

      // Tangential acceleration
      double newY = tangential.x;
      tangential.x = -tangential.y;
      tangential.y = newY;
      tangential.scale(particle.accelerations.tangentialAccel);

      // (gravity + radial + tangential) * dt
      final Vector2 accel = (_gravity + radial + tangential)..scale(dt);
      particle.dir += accel;
    } else if (_gravity[0] != 0.0 || _gravity[1] != 0) {
      // gravity
      final Vector2 accel = _gravity.clone()..scale(dt);
      particle.dir += accel;
    }

    // Update particle position
    particle.pos[0] += particle.dir[0] * dt;
    particle.pos[1] += particle.dir[1] * dt;

    // Size
    particle.size = math.max(particle.size + particle.deltaSize * dt, 0.0);

    // Angle
    particle.rotation += particle.deltaRotation * dt;

    // Color
    if (particle.simpleColorSequence != null) {
      for (int i = 0; i < 4; i++) {
        particle.simpleColorSequence[i] += particle.simpleColorSequence[i + 4] * dt;
      }
    } else {
      particle.colorPos = math.min(particle.colorPos + particle.deltaColorPos * dt, 1.0);
    }
  }

  if (autoRemoveOnFinish && _particles.length == 0 && _numEmittedParticles > 0) {
    if (parent != null) removeFromParent();
  }
}