delay method

Duration delay(
  1. int attempt, {
  2. Duration? retryAfter,
  3. double? jitter,
})

Final wait. Honors retryAfter when larger; else full jitter. jitter (0..1) is injectable so tests are deterministic.

Implementation

Duration delay(int attempt, {Duration? retryAfter, double? jitter}) {
  final j = (jitter ?? Random().nextDouble()).clamp(0.0, 1.0);
  final ceiling = backoffCeiling(attempt).inMilliseconds;
  final jittered = (ceiling * j).toInt();
  if (retryAfter != null && retryAfter.inMilliseconds > jittered) {
    return Duration(milliseconds: min(maxDelay.inMilliseconds, retryAfter.inMilliseconds));
  }
  return Duration(milliseconds: jittered);
}