setStoneTransaction method

void setStoneTransaction(
  1. String message
)

Implementation

void setStoneTransaction(String message) {
  try {
    if (message.contains('{')) {
      final map = json.decode(message);

      switch (map['method']) {
        case 'licence':
          String errorMessage = (map['errorMessage'] ?? '').toString();
          final messageFlow = map['message'] as String? ?? '';
          lastStatus = StoneStatusTechActivateRunning(message: messageFlow);
          final resultLicence = int.tryParse((map['result'] ?? '').toString()) ?? 999999;

          if (resultLicence != 0 || errorMessage.toLowerCase().contains('erro')) {
            if (errorMessage.isEmpty) {
              errorMessage = 'Erro ao validar a licença';
            }
            lastStatus = StoneStatusTechActivateError(message: errorMessage);
          }

          _emit(lastStatus!);
        case 'active':
          final message = (map['message'] ?? '').toString().toLowerCase();
          if (message.contains('terminal ativado')) {
            lastStatus = const StoneStatusTechActivate();
          } else if (message.contains('licença ativada')) {
            // Ignorar mensagem de licença ativada durante o fluxo de ativação do terminal
            // Esta mensagem vem do checkValidLicence e não deve interferir no fluxo
            return;
          } else {
            lastStatus = StoneStatusTechActivateError(message: map['message'] ?? 'Erro ao ativar o terminal');
          }
          _emit(lastStatus!);
          return;
        case 'cancel':
          lastStatus = StoneStatusTechCanceled(cancelExtraData: map);
          _emit(lastStatus!);
          return;
        case 'transaction':
          final transaction = StoneTransactionModel.fromMap(map);
          lastStatus = StoneStatusTechTransaction(transaction: transaction);
          _emit(lastStatus!);
          return;
        case 'QRCode':
          final transaction = StoneTransactionModel.fromMap(map);
          lastStatus = StoneStatusTechQRCodeTransaction(transaction: transaction);
          _emit(lastStatus!);
          return;
        case 'printerTransaction':
          lastStatus = const StonePrinterCustomer();
          _emit(lastStatus!);
          return;
        case 'PaymentOptions':
          final optionsList = map['options'] as List<dynamic>?;
          final options = optionsList?.map((e) => e.toString()).toList() ?? <String>[];
          final message = (map['message'] ?? '').toString();
          lastStatus = StoneStatusTechPaymentOptions(options: options, message: message);
          _emit(lastStatus!);
          return;
      }
    }
  } catch (e) {
    log('***Erro setStoneTransaction: $e');
  }
}