refetchQueries method

Future<void> refetchQueries([
  1. dynamic filterOrPredicate
])

Refetch all queries matching filterOrPredicate.

Can be called with:

  • ZenQueryFilter: Refetches all queries matching the filter criteria.
  • bool Function(String key): Refetches queries whose key matches the predicate.
  • bool Function(ZenQuery query): Refetches queries matching the query predicate.
  • null or no arguments: Refetches ALL active enabled queries in the cache.

Implementation

Future<void> refetchQueries([dynamic filterOrPredicate]) async {
  final List<ZenQuery> queriesToRefetch;
  if (filterOrPredicate == null) {
    queriesToRefetch = _queries.values
        .where((q) => !q.isDisposed && q.enabled.value)
        .toList();
  } else if (filterOrPredicate is ZenQueryFilter) {
    queriesToRefetch =
        getQueries(filterOrPredicate).where((q) => q.enabled.value).toList();
  } else if (filterOrPredicate is bool Function(String key)) {
    queriesToRefetch = _queries.entries
        .where((e) =>
            filterOrPredicate(e.key) &&
            !e.value.isDisposed &&
            e.value.enabled.value)
        .map((e) => e.value)
        .toList();
  } else if (filterOrPredicate is bool Function(ZenQuery query)) {
    queriesToRefetch = _queries.values
        .where(
            (q) => !q.isDisposed && q.enabled.value && filterOrPredicate(q))
        .toList();
  } else {
    queriesToRefetch = [];
  }

  final futures = <Future>[];
  for (final q in queriesToRefetch) {
    futures.add(
      Future(() async {
        try {
          await q.refetch();
        } catch (e) {
          ZenLogger.logWarning(
            'Failed to refetch query ${q.queryKey}: $e',
          );
        }
      }),
    );
  }
  await Future.wait(futures);
  ZenLogger.logDebug('Refetched ${queriesToRefetch.length} queries');
}