fetchInfiniteQuery<DataType, ErrorType, PageType> method

Future<DataType?> fetchInfiniteQuery<DataType, ErrorType, PageType>(
  1. String key,
  2. InfiniteQueryFn<DataType, PageType> queryFn, {
  3. required InfiniteQueryNextPage<DataType, PageType> nextPage,
  4. required PageType initialPage,
  5. RetryConfig? retryConfig,
  6. RefreshConfig? refreshConfig,
  7. JsonConfig<DataType>? jsonConfig,
})

Creates + stores an InfiniteQuery and fetches the first page immediately and returns the result

Implementation

Future<DataType?> fetchInfiniteQuery<DataType, ErrorType, PageType>(
  String key,
  InfiniteQueryFn<DataType, PageType> queryFn, {
  required InfiniteQueryNextPage<DataType, PageType> nextPage,
  required PageType initialPage,
  RetryConfig? retryConfig,
  RefreshConfig? refreshConfig,
  JsonConfig<DataType>? jsonConfig,
}) async {
  try {
    DataType? result;
    final completer = Completer<DataType>();
    final query = createInfiniteQuery<DataType, ErrorType, PageType>(
      key,
      queryFn,
      nextPage: nextPage,
      initialPage: initialPage,
      retryConfig: retryConfig,
      refreshConfig: refreshConfig,
      jsonConfig: jsonConfig,
    );

    final subscription = query.dataStream.listen((event) {
      if (!completer.isCompleted) completer.complete(event.data);
    });

    final errorSubscription = query.errorStream.listen((event) {
      if (!completer.isCompleted)
        completer.completeError(event.data != null ? event.data! : "");
    });

    result = await query.fetch();
    result ??= await completer.future;

    errorSubscription.cancel();
    subscription.cancel();
    return result;
  } catch (e) {
    return null;
  }
}