Search packages, repositories and app categories

GitHub repositorygabuldev/pagseguro_smart_flutter

pagseguro_smart_flutter

gabuldev/pagseguro_smart_flutter open-source repository details.

pagseguro_smart_flutter project cover
Stars
12
Forks
14
Last push (UTC)
Mar 28, 2025
Project status
Active

Original README

English project snapshot. Visit GitHub for the latest content.

Pagseguro Smart Flutter

PagSeguro

Sobre   |   Tecnologias   |   Configuração   |   Autores   |  


:dart: Sobre

Projeto destinado a facilitar a integração com o SDK da PagSeguro Smart no Flutter. Funciona somente com máquinas smarts

:rocket: Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

:checkered_flag: Configuração

# Pubspec.yaml

Para usar este plugin, adicione plugpag_flutter como dependência ao seu arquivo pubspec.yaml.

dependencies:
  pagseguro_smart_flutter: any

This will get you the latest version.

# Android Manifest

Para integrar a biblioteca a biblioteca PlugPagService em aplicativos para Android é necessário adicionar a seguinte permissão ao AndroidManifest.xml.

<uses-permission android:name="br.com.uol.pagseguro.permission.MANAGE_PAYMENTS"/>
# Intent-filter

Para que seu aplicativo possa ser escolhido como aplicativo padrão de pagamento e receber Intents de inserção de cartão, é necessário adicionar o seguinte código em seu AndroidManifest.xml dentro da sua Activity principal.

<intent-filter>
 <action android:name="br.com.uol.pagseguro.PAYMENT"/>
 <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
# Build.gradle
=> Wrapper v1.29.5

Em seu build.gradle a nivel do app, a propriedade minSdkVersion precisa ser level 23. Recurso este exigido pela versão do plugpagservice da PagSeguro.

...
defaultConfig {
        applicationId "com.example.pagseguro_example"
        minSdkVersion 23
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
...
# Implementação

Para começar é necessário criar uma classe que implemente ´PaymentHandler´, sendo que essa é a responsável por monitorar e retornar os dados da pagseguro.

Criando classe PaymentController
class PaymentController extends PaymentHandler {
  int saleValue = 0;
  bool enable = false;
  bool clickPayment = false;
  bool enableRefund = false;
  String? transactionCode;
  String? transactionId;
  String? response;

  void setSaleValue(double value) {
    if (value > 0.0) {
      saleValue = (value * 100).toInt();
      clickPayment = false;
      enable = true;
    } else {
      clickPayment = false;
      enable = false;
    }
  }

  @override
  void disposeDialog() {
    BotToast.cleanAll();
  }

  @override
  void onAbortedSuccessfully() {
    BotToast.showText(text: "Operação cancelada");
  }

  @override
  void onActivationDialog() {}

  @override
  void onAuthProgress(String message) {
    BotToast.showLoading();
  }

  @override
  void onError(String message) {
    BotToast.showText(text: message);
  }

  @override
  void onMessage(String message) {
    BotToast.showText(text: message);
  }

  @override
  void onFinishedResponse(String message) {
    BotToast.showText(text: message);
  }

  @override
  void onTransactionSuccess() {
    BotToast.showText(text: "Transacao com successo!");
  }

  @override
  void writeToFile({
    String? transactionCode,
    String? transactionId,
    String? response,
  }) {}

  @override
  void onLoading(bool show) {
    if (show) {
      BotToast.showLoading();
      return;
    }
    BotToast.closeAllLoading();
  }

  @override
  void onTransactionInfo({
    String? transactionCode,
    String? transactionId,
    String? response,
  }) {
    this.transactionCode = transactionCode;
    this.transactionId = transactionId;
    this.response = response;
    BotToast.showText(
        text:
            "{transactionCode: $transactionCode \n transactionId: $transactionId}");
    enableRefund = true;
  }
}

Métodos da PaymentHandler
onAbortedSuccessfully

Acionado quando uma transação de abort é concluída com sucesso.

onAuthProgress

Acionado quando uma transação está em progresso. Retorno do status do Pinpad também é mapeado aqui.

onError

Acionado quando uma transação retorna um estado de ´Erro´, devolvendo como parâmetro uma ´String´ com a mensagem.

onMessage

Método responsável por devolver para o usuário uma mensagem retornada da PagSeguro.

onFinishedResponse

Método responsável por devolver uma response da transação.

onTransactionSuccess

Método acionado quando a transação foi concluída com sucesso.

onTransactionInfo

Método resposável por devolver uma response completa da transação, sendo possível mapear vários campos retornados.

Iniciar transação

Para iniciar a transação é necessário primeiro chamar a função de ativação do PinPad, passando como parâmetro o código de ativação daquele POS (código este informado na sua conta PagBank).

PagseguroSmart.instance().payment.activePinpad('12345');

Logo após ativação, o SDK da PagSeguro fornece algumas opções de transação como:

  • Crédito = PagseguroSmart.instance().payment.creditPayment(12.50)

  • Crédito Parcelado = PagseguroSmart.instance().payment.creditPaymentParc(controller.saleValue, 2)

  • Débito = PagseguroSmart.instance().payment.debitPayment(12.50)

  • PIX = PagseguroSmart.instance().payment.pixPayment.(12.50)

  • Voucher (alimentação) = PagseguroSmart.instance().payment.voucherPayment(12.50)

  • startPayment(Permite chamar diretamente o método startPayment da biblioteca PlugPag) = PagseguroSmart.instance().payment.startPayment( int type, int amount, int installmentType, int installments, String userReference, bool printReceipt, bool partialPay, bool isCarne)

  • Estorno = PagseguroSmart.instance().payment.refund(transactionCode: controller.transactionCode, transactionId: controller.transactionId)

  • Abortar transação = PagseguroSmart.instance().payment.abortTransaction()

  • Última transação = PagseguroSmart.instance().payment.lastTransaction()

  • Obter status de ativação do Pinpad = PagseguroSmart.instance().payment.isAuthenticated()

**Obs: A via do estabelecimento do estabelecimento pode ser impressa ou não baseada no parâmetro printReceipt. Após a finalização do pagamento, um popUp é exibido perguntando se deseja a via do consumidor.

Método de impressão

Deve-se verificar se seu projeto tem a permissão de acesso aos arquivos dentro do dispositivo.

Imprimir um arquivo

PagseguroSmart.instance().payment.printerfromFile(path) => Fornecer o caminho absoluto ao arquivo que deve ser impresso.

Imprimir um widget

Basta chamar a função abaixo, passando o widget a ser impresso pela POS.

PrintRenderWidget.print(
  context,
  pagseguroSmartInstance: pagseguroSmart,
  child: MyCustomWidget(),
);

NfcSmart

Igualmente a classe PagSeguroSmart, essa também é necessário configurar um hanlder e inicializar o plugin antes de qualquer função.

Handler -> Você precisa em uma hanlder que extenda de NfcHandler

Inicializar -> NfcSmart.instance.initNfc(handler);

Para a classe responsável com a integração por meio do NFC, temos os seguintes métodos: NfcSmart.instance.nfc.<método>

//Responsável por fechar o handler de chamadas Future<void> closeMethodCallHandler();

//Responsável por abortar uma transação em andamento Future<bool> abortTransaction();

//Responsável por obter a última transação Future<bool> lastTransaction();

//Responsável por realizar o estorno de uma transação Future<bool> refund({required String transactionCode, required String transactionId});

//Responsável por ler as informações apartir do NFC Future<bool> readNfc(idEvento);

//Responsável pela escrita do método NFC Future<bool> writeNfc(valor, nome, cpf, numeroTag, celular, aberto, idEvento);

//Responsável por regravar informações Future<bool> reWriteNfc(valor, idEvento);

//Responsável por fazer o estorno de uma transação utilizando NFC Future<bool> refundNfc(valor, idEvento);

//Responsável por formatar os dados do cartão Future<bool> formatNfc();

//Responsável por chamar função de débito utilizando NFC Future<bool> debitNfc(idEvento, valor);

:memo: Autores

Este projeto foi desenvolvido por:

 

Voltar para o topo

Gabul - GDE Flutter & Dart GitHub avatar
GitHub author

Gabul - GDE Flutter & Dart ↗

Founder of Gabuldev, Specialist in Mobile Development, participates in the Google Developer Expert in Flutter & Dart, organizer of the GDG Nova Lima

Brazil
LanguagesJavaDartRubyHTMLObjective-CSwiftKotlin

Dependencies used

Dependency list 4 items

How do I choose a repository?

Start with your use case, compare repository activity, and check the original project before adopting it.

  1. Search by repository name, owner or description, then narrow the results by topic.
  2. Compare stars, forks and recent pushes. Stars show community interest, not a guarantee of quality.
  3. Read the README, license and issues on GitHub before using a project.

Sources and maintenance

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗