retryBackoff function
Computes a backoff delay for the given attempt number (0-indexed).
Returns a duration with jitter: roughly 300ms * 2^attempt + random jitter.
Implementation
Duration retryBackoff(int attempt) {
final baseMs = 300 * (1 << attempt);
final jitterMs = (baseMs * 0.2).toInt();
final random = DateTime.now().microsecondsSinceEpoch % jitterMs;
return Duration(milliseconds: baseMs + random);
}