startTransaction method

Future<void> startTransaction({
  1. required StoneTechPaymentParams params,
})

Implementation

Future<void> startTransaction({
  required StoneTechPaymentParams params,
}) async {
  isFinishPayment = false;
  handler?.clear();
  if (handler == null) {
    return;
  }
  credentials = params.credentials;
  if (!StoneTech.isPinpadActivated) {
    _isActivating = true;
    handler!.setStreamStatus(const StoneStatusTechActivateRunning(message: 'Ativando Terminal...'));
    try {
      await initialize(stoneCredentials: params.credentials, stonePaymentParams: params);
      // Não resetar _isActivating aqui, será resetado quando receber StoneStatusActivate ou StoneStatusActivateError
    } catch (e) {
      _isActivating = false;
      rethrow;
    }
    return;
  } else {
    _isActivating = false;
    stone.payment.setHandler(handler!);
  }
  final amountInt = _getSaleValueStone(params.amount);
  currentMethod = params.type;
  switch (currentMethod) {
    case StoneTechPaymentType.credit:
      {
        if (params.installments != null) {
          stone.payment.creditPaymentParc(
            value: amountInt,
            installment: params.installments!,
            printEstablishmentSlip: true,
            printCustomerSlip: false,
          );
        } else {
          stone.payment.creditPayment(
            amountInt,
            printEstablishmentSlip: true,
            printCustomerSlip: false,
          );
        }
      }
      break;
    case StoneTechPaymentType.debit:
      {
        stone.payment.debitPayment(
          amountInt,
          printEstablishmentSlip: true,
          printCustomerSlip: false,
        );
      }
      break;
    case StoneTechPaymentType.pix:
      {
        stone.payment.pixPayment(
          amount: amountInt,
          qrCodeAuthroization: credentials.qrCodeAuthorization ?? '',
          qrCodeProviderid: credentials.qrCodeProviderid ?? '',
          printEstablishmentSlip: true,
          printCustomerSlip: false,
        );
      }
      break;
    case StoneTechPaymentType.voucher:
      {
        stone.payment.voucherPayment(
          amountInt,
          printEstablishmentSlip: true,
          printCustomerSlip: false,
        );
      }
      break;
    default:
      throw Exception('Method not supported');
  }
}