charge method

Future<ChargeResponse> charge(
  1. BuildContext context
)

Starts a transaction by calling the Standard service

Implementation

Future<ChargeResponse> charge(BuildContext context) async {
  final request = StandardRequest(
      txRef: txRef,
      amount: amount,
      customer: customer,
      paymentOptions: paymentOptions,
      customization: customization,
      isTestMode: isTestMode,
      redirectUrl: redirectUrl,
      publicKey: publicKey,
      currency: currency,
      paymentPlanId: paymentPlanId,
      subAccounts: subAccounts,
      meta: meta);

  StandardResponse? standardResponse;

  try {
    standardResponse = await request.execute(Client());

    if (!context.mounted) {
      return ChargeResponse(
        txRef: request.txRef,
        status: "error",
        success: false,
      );
    }

    if ("error" == standardResponse.status) {
      FlutterwaveViewUtils.showToast(
          context, standardResponse.message!);
      return ChargeResponse(
          txRef: request.txRef, status: "error", success: false);
    }

    if (standardResponse.data?.link == null ||
        standardResponse.data?.link?.isEmpty == true) {
      if (!context.mounted) {
        return ChargeResponse(
          txRef: request.txRef,
          status: "error",
          success: false,
        );
      }

      FlutterwaveViewUtils.showToast(
          context,
          "Unable to process this transaction. " +
              "Please check that you generated a new tx_ref");
      return ChargeResponse(
          txRef: request.txRef, status: "error", success: false);
    }
  } catch (error) {
    if (!context.mounted) {
      return ChargeResponse(
        txRef: request.txRef,
        status: "error",
        success: false,
      );
    }

    FlutterwaveViewUtils.showToast(context, error.toString());
    return ChargeResponse(
        txRef: request.txRef, status: "error", success: false);
  }

  if (!context.mounted) {
    return ChargeResponse(
      txRef: request.txRef,
      status: "error",
      success: false,
    );
  }

  final response = await Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => StandardPaymentWidget(
        webUrl: standardResponse!.data!.link!,
      ),
    ),
  );

  if (response != null) return response!;
  return ChargeResponse(
      txRef: request.txRef, status: "cancelled", success: false);
}