waitFor<T> static method
Wait for a signal to meet a condition.
Implementation
static Future<T> waitFor<T>(
Signal<T> signal,
bool Function(T value) condition, {
Duration? timeout,
}) async {
if (condition(signal.val)) {
return signal.val;
}
final completer = Completer<T>();
StreamSubscription<T>? subscription;
subscription = signal.stream.listen((value) {
if (condition(value)) {
subscription?.cancel();
if (!completer.isCompleted) {
completer.complete(value);
}
}
});
if (timeout != null) {
return completer.future.timeout(timeout, onTimeout: () {
subscription?.cancel();
throw TimeoutException('Timeout waiting for signal condition');
});
}
return completer.future;
}