collectStreamPaged<R, T> function

Future<PagedResult<T>> collectStreamPaged<R, T>(
  1. Stream<R> stream, {
  2. required List<T> extract(
    1. R response
    ),
  3. int maxPages = 10,
})

Like collectStream but also returns whether more pages are available.

Implementation

Future<PagedResult<T>> collectStreamPaged<R, T>(
  Stream<R> stream, {
  required List<T> Function(R response) extract,
  int maxPages = 10,
}) async {
  final results = <T>[];
  var pages = 0;
  var hitPageCap = false;
  await for (final response in stream) {
    final items = extract(response);
    results.addAll(items);
    pages++;
    if (items.isEmpty) break;
    if (pages >= maxPages) {
      hitPageCap = true;
      break;
    }
  }
  return PagedResult(items: results, hasMore: hitPageCap);
}