fetchQuery<DataType, ErrorType> method

Future<DataType?> fetchQuery<DataType, ErrorType>(
  1. String key,
  2. QueryFn<DataType> queryFn, {
  3. DataType? initial,
  4. RetryConfig? retryConfig,
  5. RefreshConfig? refreshConfig,
  6. JsonConfig<DataType>? jsonConfig,
})

Creates + stores a Query and runs the queryFn immediately and returns the result

  • If fails, returns with null
  • If Query already exists, it'll run the Query.fetch anyway

Implementation

Future<DataType?> fetchQuery<DataType, ErrorType>(
  String key,
  QueryFn<DataType> queryFn, {
  DataType? initial,
  RetryConfig? retryConfig,
  RefreshConfig? refreshConfig,
  JsonConfig<DataType>? jsonConfig,
}) async {
  try {
    DataType? result;
    final completer = Completer<DataType>();
    final query = createQuery<DataType, ErrorType>(
      key,
      queryFn,
      initial: initial,
      retryConfig: retryConfig,
      refreshConfig: refreshConfig,
      jsonConfig: jsonConfig,
    );

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

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

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

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