waitUntil static method

Future<void> waitUntil(
  1. FlutterDriver? driver,
  2. Future<bool> condition(), {
  3. Duration timeout = const Duration(seconds: 10),
  4. Duration pollInterval = const Duration(milliseconds: 500),
})

Waits until the condition returns true Will raise a complete with a TimeoutException if the condition does not return true with the timeout period.

Implementation

static Future<void> waitUntil(
  FlutterDriver? driver,
  Future<bool> Function() condition, {
  Duration timeout = const Duration(seconds: 10),
  Duration pollInterval = const Duration(milliseconds: 500),
}) async {
  return Future.microtask(() async {
    final completer = Completer<void>();
    var maxAttempts =
        (timeout.inMilliseconds / pollInterval.inMilliseconds).round();
    var attempts = 0;

    while (attempts < maxAttempts) {
      final result = await condition();
      if (result) {
        completer.complete();
        break;
      } else {
        await Future.delayed(pollInterval);
      }
    }
  }).timeout(timeout);
}