fetch method
Retrieves data from a given endpoint and resturns a WPResponse
Implementation
Future<WPResponse> fetch(
/// Provide an API endpoint
String endpoint, {
/// REST API namespace
String namespace = wpNamespace,
/// Additional wordpress arguments
Map<String, dynamic>? args,
}) async {
final uri = await _discover(site);
//***************************** */
// Remove any starting '/' if any
//****************************** */
if (endpoint.startsWith('/')) {
endpoint = endpoint.substring(1);
}
if (uri.contains('?') && endpoint.contains('?')) {
endpoint = endpoint.replaceAll('?', '&');
}
// NAMESPACE DISCOVERY
// Check if the provided namespace has a trailing `/`
if (namespace.endsWith('/')) {
namespace = namespace.substring(0, namespace.length - 1).toLowerCase();
}
// Set [Dio] base Url
_dio.options.baseUrl = uri;
// **********************************************
// SET WOOCOMMERCE CREDENTIALS
// **********************************************
if (wooCredentials != null) {
// _dio.options.queryParameters ??= {};
_dio.options.queryParameters.addAll({
"consumer_key": wooCredentials!.consumerKey,
"consumer_secret": wooCredentials!.consumerSecret
});
}
//******************************************* */
// FETCH REQUESTED DATA AND RETURN WP A RESPONSE
//******************************************* */
try {
int? total, totalPages;
final res = await _dio.get(
'/$namespace/$endpoint',
queryParameters: args,
);
if (res.headers.value('x-wp-total') != null) {
total = int.tryParse(res.headers.value('x-wp-total')!);
totalPages = int.tryParse(res.headers.value('x-wp-totalpages')!);
}
return WPResponse(
data: res.data,
meta: WPMeta(
total: total,
totalPages: totalPages,
),
statusCode: res.statusCode!,
);
} on DioError catch (e) {
WPUtils.logger.e(e.message);
rethrow;
} catch (e) {
rethrow;
}
}