fetch method
Fetch or refetch data
Returns cached data immediately if available and not stale, otherwise fetches fresh data
Implementation
Future<T> fetch({bool force = false}) async {
// Return cached data if available and not stale
if (!force && hasData && !isStale) {
return data.value!;
}
// Deduplicate concurrent requests
if (_currentFetch != null) {
return _currentFetch!;
}
// Start fetch operation
_currentFetch = _performFetch();
try {
final result = await _currentFetch!;
return result;
} finally {
_currentFetch = null;
}
}