BloomQuery<T> constructor
BloomQuery<T> ({})
Creates a BloomQuery with cache key, fetcher, and configuration options.
Implementation
BloomQuery({
required this.key,
required this.fetch,
this.staleTime = const Duration(minutes: 5),
this.cacheTime = const Duration(minutes: 30),
this.enabled = true,
this.retry = 2,
this.retryDelay = const Duration(milliseconds: 500),
}) {
// Check initial cache state
final cachedEntry = BloomData.getEntry<T>(key);
final initialData = cachedEntry?.data;
final isStaleInitial = cachedEntry?.shouldRevalidate ?? true;
_data = signal<T?>(initialData, debugLabel: 'query.data[${BloomData.normalizeKey(key)}]');
_status = signal<QueryStatus>(
initialData != null ? QueryStatus.success : QueryStatus.idle,
debugLabel: 'query.status',
);
_error = signal<Object?>(null, debugLabel: 'query.error');
_isFetching = signal<bool>(false, debugLabel: 'query.isFetching');
_isStale = signal<bool>(isStaleInitial, debugLabel: 'query.isStale');
// Subscribe to cache invalidations
_invalidationSub = BloomData.onInvalidated(key).listen((_) {
_isStale.value = true;
if (enabled && !_isDisposed) {
refetch();
}
});
if (enabled) {
if (cachedEntry == null || cachedEntry.shouldRevalidate) {
_executeFetch();
}
}
}