waitUntilExists method

Future<PatrolFinder> waitUntilExists(
  1. PatrolFinder finder, {
  2. Duration? timeout,
  3. bool enablePatrolLog = true,
})
inherited

Waits until this finder finds at least one widget.

Throws a WaitUntilVisibleTimeoutException if no widgets found.

Timeout is globally set by PatrolTesterConfig.visibleTimeout inside PatrolTester.config. If you want to override this global setting, set timeout.

Implementation

Future<PatrolFinder> waitUntilExists(
  PatrolFinder finder, {
  Duration? timeout,
  bool enablePatrolLog = true,
}) {
  return TestAsyncUtils.guard(
    () => wrapWithPatrolLog<PatrolFinder>(
      action: 'waitUntilExists',
      finder: finder,
      color: AnsiCodes.cyan,
      enablePatrolLog: enablePatrolLog,
      function: () async {
        final duration = timeout ?? config.existsTimeout;
        final end = tester.binding.clock.now().add(duration);

        while (finder.evaluate().isEmpty) {
          final now = tester.binding.clock.now();
          if (now.isAfter(end)) {
            throw WaitUntilExistsTimeoutException(
              finder: finder,
              duration: duration,
            );
          }

          await tester.pump(const Duration(milliseconds: 100));
        }

        return finder;
      },
    ),
  );
}