fetchData method
Implementation
Future<FetchFirstResponse> fetchData({
required String urlPath,
Map<String, String>? headers,
Duration? timeOut,
OfflineFirstFetchPolicy fetchPolicy = OfflineFirstFetchPolicy.cacheThenNetwork,
bool debugMode = false,
}) async {
try {
if (debugMode) log("FetchPolicy: $fetchPolicy | URL: $urlPath");
switch (fetchPolicy) {
case OfflineFirstFetchPolicy.networkOnly:
return await _fetchFromNetwork(urlPath, headers, timeOut, debugMode);
case OfflineFirstFetchPolicy.cacheOnly:
final cached = await _storage.getData(urlPath);
if (debugMode) log("Loaded from cache (cacheOnly): $cached");
return FetchFirstResponse(
data: cached,
status: cached != null,
message: cached != null ? '' : 'No cached data found.',
);
case OfflineFirstFetchPolicy.cacheThenNetwork:
final cached = await _storage.getData(urlPath);
if (debugMode) log("Loaded from cache (cacheThenNetwork): $cached");
_fetchFromNetwork(urlPath, headers, timeOut, debugMode); // fire & forget
return FetchFirstResponse(
data: cached,
status: cached != null,
message:
cached != null
? 'Loaded from cache. Fresh data updating in background.'
: 'No cached data. Fetching online...',
);
}
} catch (e) {
if (debugMode) log("Fetch error: $e");
return FetchFirstResponse(data: null, status: false, message: e.toString());
}
}