waitFor function

Future<void> waitFor(
  1. String what,
  2. FutureOr<bool> condition(), {
  3. Duration timeout = const Duration(seconds: 15),
})

Waits until condition holds, polling every few milliseconds; throws ScenarioFailure naming what after timeout.

Implementation

Future<void> waitFor(
  String what,
  FutureOr<bool> Function() condition, {
  Duration timeout = const Duration(seconds: 15),
}) async {
  final end = DateTime.now().add(timeout);
  while (!await condition()) {
    if (DateTime.now().isAfter(end)) {
      throw ScenarioFailure('timed out waiting for $what');
    }
    await Future<void>.delayed(const Duration(milliseconds: 5));
  }
}