request method
General API request handler
Implementation
Future<dynamic> request({
required String endpoint,
required RequestMethod method,
Map<String, dynamic>? params,
/// either a [Map<String, dynamic>] or a [FormData] instance
Object? data,
Map<String, String>? headers,
String? contentType,
Duration? cacheDuration,
bool forceRefresh = false,
bool isThirdParty = false,
String? thirdPartyBaseUrl,
String clientName = 'default',
}) async {
// Ensure 'data' is either a [Map<String, dynamic>] or a [FormData] instance
assert(
data == null || data is Map<String, dynamic> || data is FormData,
'data must be either Map<String, dynamic> or FormData',
);
final String cacheKey = _generateCacheKey(endpoint, params);
// Use cached data if available
if (!forceRefresh) {
var cachedData = _cacheService.getData(cacheKey);
if (cachedData != null) return cachedData;
}
final CancelToken? cancelToken = kIsWeb ? null : CancelToken();
if (cancelToken != null) {
_cancelTokens[cacheKey] = cancelToken;
}
Dio apiDio;
if (isThirdParty && thirdPartyBaseUrl != null) {
apiDio =
ApiRequest().getThirdPartyDio(thirdPartyBaseUrl, headers: headers);
} else {
apiDio = ApiRequest().getNamedDio(clientName);
}
try {
Response response = await _makeRequest(
apiDio,
endpoint,
method,
params,
data,
headers,
contentType,
cancelToken,
);
dynamic parsedResponse = response.data;
// dynamic parsedResponse = ApiParser.parseResponse(response);
// Cache successful response
if (cacheDuration != null) {
await _cacheService.storeData(cacheKey, parsedResponse, cacheDuration);
}
return parsedResponse;
} on DioException catch (e) {
return _handleNetworkError(e);
} finally {
if (cancelToken != null) {
_cancelTokens.remove(cacheKey);
}
}
}