selectShippingRateInStoreCart method

Future<StoreCart> selectShippingRateInStoreCart({
  1. required int packageId,
  2. required String rateId,
  3. String? bearerToken,
  4. bool? useFaker,
})

Select shipping rate for a package

packageId Package ID (required) rateId Rate ID (required) bearerToken Optional Bearer token for authenticated users useFaker Fakes the API request

Returns the full cart object response

Implementation

Future<StoreCart> selectShippingRateInStoreCart({
  required int packageId,
  required String rateId,
  String? bearerToken,
  bool? useFaker,
}) async {
  final isUsingFaker = useFaker ?? this.useFaker;

  if (isUsingFaker) {
    return StoreCart.fake();
  }

  try {
    final originalBaseUrl = dio.options.baseUrl;
    dio.options.baseUrl = '$baseUrl/wp-json/wc/store/v1';
    dio.options.headers = {};
    final headers = await _buildStoreApiHeaders(bearerToken: bearerToken);

    final response = await dio.post(
      _StoreCartEndpoints.selectShippingRate,
      options: Options(headers: headers),
      queryParameters: {'package_id': packageId, 'rate_id': rateId},
    );

    await _extractAndStoreCartToken(response, bearerToken: bearerToken);
    dio.options.baseUrl = originalBaseUrl;

    if (response.statusCode != null &&
        response.statusCode! >= 200 &&
        response.statusCode! < 300) {
      return StoreCart.fromJson(response.data);
    } else {
      throw Exception(
        "API call failed with status code: ${response.statusCode}",
      );
    }
  } on DioException catch (e) {
    final errorMsg = e.response?.data["message"] ?? e.message;
    throw Exception("API call failed: $errorMsg");
  } catch (e) {
    throw Exception("Unexpected error in API call: ${e.toString()}");
  }
}