waitForEmissions method

Future<void> waitForEmissions(
  1. int count, {
  2. Duration? timeout,
})

Waits for a specific number of emissions.

Implementation

Future<void> waitForEmissions(int count, {Duration? timeout}) async {
  final completer = Completer<void>();
  final targetCount = _emissions.length + count;

  void check() {
    if (_emissions.length >= targetCount && !completer.isCompleted) {
      completer.complete();
    }
  }

  final sub = bloc.stream.listen((_) => check());

  try {
    await completer.future.timeout(
      timeout ?? const Duration(seconds: 5),
      onTimeout: () => throw TimeoutException(
        'Timed out waiting for $count emissions',
      ),
    );
  } finally {
    await sub.cancel();
  }
}