fetch method

Future<WPResponse> fetch(
  1. String endpoint, {
  2. String namespace = wpNamespace,
  3. Map<String, dynamic>? args,
})

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;
  }
}