next method

Computes the delay to use for a resize event observed at now.

Implementation

ResizeCoalescerState next(ResizeCoalescerState state, DateTime now) {
  final last = state.lastEventAt;
  if (last == null) {
    return ResizeCoalescerState(
      lastEventAt: now,
      burstCount: 0,
      delay: Duration.zero,
    );
  }

  final delta = now.difference(last);
  if (delta <= const Duration(milliseconds: 20)) {
    return ResizeCoalescerState(
      lastEventAt: now,
      burstCount: state.burstCount + 1,
      delay: const Duration(milliseconds: 30),
    );
  }
  if (delta <= const Duration(milliseconds: 80)) {
    return ResizeCoalescerState(
      lastEventAt: now,
      burstCount: 1,
      delay: const Duration(milliseconds: 8),
    );
  }
  return ResizeCoalescerState(
    lastEventAt: now,
    burstCount: 0,
    delay: Duration.zero,
  );
}