startTransaction method
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');
}
}