create method

Future<Response> create({
  1. required dynamic params,
  2. void callback(
    1. RazorpayApiException?,
    2. Response?
    )?,
})

Creates a Subscription or Registration Link

@param params - Check docs. Accepts RazorpaySubscriptionCreateRequestBody or RazorpaySubscriptionLinkCreateRequestBody or RazorpayRegistrationLinkBaseRequestBody

Implementation

Future<Response<dynamic>> create({
  // Return dynamic as response type varies
  required dynamic params, // Use dynamic for union type
  void Function(RazorpayApiException?, Response<dynamic>?)? callback,
}) async {
  var url = BASE_URL;
  Map<String, dynamic> requestData;
  FromJsonFactory<dynamic> fromJsonFactory;

  if (params is RazorpaySubscriptionCreateRequestBody ||
      params is RazorpaySubscriptionLinkCreateRequestBody) {
    url = BASE_URL;
    requestData = params is RazorpaySubscriptionCreateRequestBody
        ? params.toJson()
        : params is RazorpaySubscriptionLinkCreateRequestBody
            ? params.toJson()
            : {};

    fromJsonFactory = RazorpaySubscription.fromJson;
  } else if (params is RazorpayRegistrationLinkBaseRequestBody) {
    url = '/subscription_registration/auth_links';
    requestData = params.toJson();
    fromJsonFactory = RazorpayRegistrationLink.fromJson;
  } else {
    throw ArgumentError(
      'Invalid params type for subscription/link creation.',
    );
  }

  // The actual type T will be determined by the fromJsonFactory passed.
  return api.post<dynamic>(
    {
      'url': url,
      'data': requestData,
    },
    fromJsonFactory: fromJsonFactory,
    callback: callback,
  );
}