delay method
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);
}