conditionWithTimeout static method

Future<bool> conditionWithTimeout(
  1. Duration timeout,
  2. bool condition()
)

Periodically checks a condition until it is met or a timeout occurs.

This method immediately returns true if the condition is already met. Otherwise, it sets up a periodic timer that checks the condition at regular intervals defined by Constants.repeatConditionCheckInterval.

If the condition is met within the timeout duration, the method returns true. If the timeout is reached before the condition is met, it returns false.

Returns a Future<bool> that completes with the result of the condition check.

All timers are automatically cancelled when the future completes.

Implementation

static Future<bool> conditionWithTimeout(Duration timeout, bool Function() condition) async {
  final completer = Completer<bool>();

  // Immediately return true if the condition is already met
  if (condition()) {
    return true;
  }

  // Set up a periodic timer to check for the condition
  final timer = Timer.periodic(Constants.repeatConditionCheckInterval, (_) {
    if (condition()) {
      completer.complete(true);
    }
  });

  // Set a timeout timer
  final timeoutTimer = Timer(timeout, () {
    if (!completer.isCompleted) {
      completer.complete(false);
    }
  });

  return completer.future.then((value) {
    timeoutTimer.cancel(); // Cancel the subscription
    timer.cancel(); // Cancel the timer
    return value;
  });
}