in lib/src/util.dart [10:39]
Future<dynamic> retry(Future Function() f, Duration interval,
{Duration? timeout}) async {
var keepGoing = true;
Future<dynamic> _withTimeout(Future Function() f, {Duration? duration}) {
if (duration == null) {
return f();
}
return f().timeout(duration, onTimeout: () {
keepGoing = false;
final msg = duration.inSeconds == 0
? '${duration.inMilliseconds}ms'
: '${duration.inSeconds}s';
throw StateError('Failed to complete within $msg');
});
}
return _withTimeout(() async {
while (keepGoing) {
try {
return await f();
} catch (_) {
if (keepGoing) {
await Future<dynamic>.delayed(interval);
}
}
}
}, duration: timeout);
}