getnet_payments 0.0.4 copy "getnet_payments: ^0.0.4" to clipboard
getnet_payments: ^0.0.4 copied to clipboard

PlatformAndroid

getnet_payments é um plugin que fornece integração com as máquinas de pagamento da empresa Getnet.

example/lib/main.dart

import 'dart:convert';
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:getnet_payments/getnet_payments.dart';
import 'package:uuid/uuid.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: PaymentApp(),
    );
  }
}

class PaymentApp extends StatefulWidget {
  const PaymentApp({super.key});

  @override
  State<PaymentApp> createState() => _PaymentAppState();
}

class _PaymentAppState extends State<PaymentApp>
    with SingleTickerProviderStateMixin {
  late TabController _tabController;
  TextEditingController valueController = TextEditingController(text: '12.50');
  String? mensagem;
  String? mensagemReembolso;
  final List<Transaction> _successfulTransactions = [];

  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 2, vsync: this);
  }

  void _addTransaction(Transaction transaction) {
    if (transaction.result != '0') return;
    setState(() {
      _successfulTransactions.insert(0, transaction);
    });
  }

  double _convertAmount(Transaction transaction) {
    final amount = transaction.amount;
    final amountDouble = double.parse(
        '${amount!.substring(0, amount.length - 2)}.${amount.substring(amount.length - 2)}');
    return amountDouble;
  }

  Future<void> _processPrint() async {
    FocusScope.of(context).unfocus();

    final logo = await rootBundle.load('assets/images/logo.jpg');
    String base64 = base64Encode(logo.buffer.asUint8List());

    final items = [
      ItemPrintModel.text(
        content: "TEXTO SMALL CENTRALIZADO",
        align: AlignModeEnum.center,
        fontFormat: FontFormatEnum.small,
      ),
      ItemPrintModel.text(
        content: "TEXTO MEDIUM CENTRALIZADO",
        align: AlignModeEnum.center,
        fontFormat: FontFormatEnum.medium,
      ),
      ItemPrintModel.text(
        content: "TEXTO LARGE CENTRALIZADO",
        align: AlignModeEnum.center,
        fontFormat: FontFormatEnum.large,
      ),
      ItemPrintModel.qrcode(
        content: "https://example.com",
        align: AlignModeEnum.center,
        height: 200,
      ),
      ItemPrintModel.barcode(
        content: "123456789012",
        align: AlignModeEnum.right,
      ),
      ItemPrintModel.image(
        content: base64,
        align: AlignModeEnum.center,
      ),
      ItemPrintModel.linewrap(lines: 2),
    ];
    GetnetPayments.pos.print(items);
  }

  Future<void> _processPayment(
    PaymentTypeEnum type, {
    int installments = 1,
    String? creditType,
  }) async {
    FocusScope.of(context).unfocus();
    if (valueController.text.isEmpty) return;

    final valor = double.parse(valueController.text);
    try {
      final transaction = await GetnetPayments.deeplink.payment(
        amount: valor,
        paymentType: type,
        callerId: const Uuid().v4(),
        installments: installments,
        creditType: creditType,
      );
      if (transaction != null) {
        setState(() {
          mensagem = '${transaction.result} - ${transaction.resultDetails}';
        });
        _addTransaction(transaction);
      }
    } catch (e) {
      log(e.toString());
      setState(() {
        mensagem = 'Erro ao realizar pagamento';
      });
    }
  }

  Future<void> _processReprintLastTransaction() async {
    FocusScope.of(context).unfocus();

    try {
      final result = await GetnetPayments.deeplink.reprint();
      if (result != null) {
        setState(() {
          mensagem = result;
        });
      }
    } catch (e) {
      log(e.toString());
      setState(() {
        mensagem = 'Erro ao realizar pagamento';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Getnet Payments'),
        bottom: TabBar(
          controller: _tabController,
          tabs: const [
            Tab(text: 'Pagamento'),
            Tab(text: 'Transações'),
          ],
        ),
      ),
      body: TabBarView(
        controller: _tabController,
        children: [
          // Pagamento Tab
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: [
                TextField(
                  controller: valueController,
                  keyboardType: TextInputType.number,
                  inputFormatters: [
                    FilteringTextInputFormatter.allow(RegExp(r'[0-9.]')),
                  ],
                  decoration: const InputDecoration(
                    hintText: 'Valor',
                    contentPadding: EdgeInsets.all(10.0),
                  ),
                ),
                const SizedBox(height: 20),
                Wrap(
                  spacing: 8,
                  runSpacing: 8,
                  children: [
                    ElevatedButton(
                      onPressed: () => _processPayment(PaymentTypeEnum.credit),
                      child: const Text('CRÉDITO'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processPayment(
                        PaymentTypeEnum.credit,
                        installments: 12,
                        creditType: 'creditMerchant',
                      ),
                      child: const Text('CRÉDITO 12X'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processPayment(PaymentTypeEnum.debit),
                      child: const Text('DÉBITO'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processPayment(PaymentTypeEnum.voucher),
                      child: const Text('VOUCHER'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processPayment(PaymentTypeEnum.pix),
                      child: const Text('PIX'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processReprintLastTransaction(),
                      child: const Text('REIMPRIMIR ÚLTIMO CUPOM'),
                    ),
                    ElevatedButton(
                      onPressed: () => _processPrint(),
                      child: const Text('TESTAR IMPRESSORA'),
                    ),
                  ],
                ),
                const SizedBox(height: 20),
                if (mensagem != null)
                  Column(
                    children: [
                      const Divider(),
                      const Text('Resultado:'),
                      const Divider(),
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(mensagem!),
                      ),
                    ],
                  ),
              ],
            ),
          ),
          // Transações Tab
          SizedBox(
            child: Column(
              children: [
                if (mensagemReembolso != null)
                  Column(
                    children: [
                      const Text('Resultado Reembolso:'),
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(mensagemReembolso!),
                      ),
                    ],
                  ),
                Expanded(
                  child: ListView.builder(
                    itemCount: _successfulTransactions.length,
                    itemBuilder: (context, index) {
                      final transaction = _successfulTransactions[index];
                      return Card(
                        margin: const EdgeInsets.symmetric(
                            vertical: 8, horizontal: 16),
                        child: ListTile(
                          title: Text('CV: ${transaction.cvNumber}'),
                          subtitle: Text(
                              'Valor: ${_convertAmount(transaction).toStringAsFixed(2)}'),
                          trailing: ElevatedButton(
                            onPressed: () async {
                              final refund =
                                  await GetnetPayments.deeplink.refund(
                                amount: _convertAmount(transaction),
                                transactionDate: DateTime.now(),
                                cvNumber: transaction.cvNumber,
                              );

                              if (refund != null) {
                                setState(() {
                                  mensagemReembolso =
                                      '${refund.result} - ${refund.resultDetails}';
                                });

                                if (refund.result ==
                                    TransactionResultEnum.success.value) {
                                  _successfulTransactions.removeAt(index);
                                }
                              }
                            },
                            child: const Text('Reembolsar'),
                          ),
                        ),
                      );
                    },
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
6
likes
150
points
193
downloads

Publisher

unverified uploader

Weekly Downloads

getnet_payments é um plugin que fornece integração com as máquinas de pagamento da empresa Getnet.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, intl, plugin_platform_interface

More

Packages that depend on getnet_payments

Packages that implement getnet_payments