pluspay_a2a 0.7.0 copy "pluspay_a2a: ^0.7.0" to clipboard
pluspay_a2a: ^0.7.0 copied to clipboard

PlatformAndroid

PlusPay A2A (app-to-app) payment plugin for Android POS devices — start payments, EOD, refunds and transaction queries.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:pluspay_a2a/pluspay_a2a.dart';
import 'package:pluspay_a2a_example/components/components.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 MaterialApp(
      title: 'Pluspay A2A Example',
      debugShowCheckedModeBanner: false,
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final PPA2AClient _pluspay = PPA2AClient();
  bool _loading = false;

  @override
  void initState() {
    super.initState();
    _pluspay.initialize();
  }

  @override
  void dispose() {
    _pluspay.dispose();
    super.dispose();
  }

  String get generateOrderCode => DateTime.now().toIso8601String();

  Future<void> _execute(Future<dynamic> Function() fn) async {
    setState(() {
      _loading = true;
    });

    try {
      await fn();
      setState(() {
        _loading = false;
      });
      if (!mounted) return;
      _showResultDialog(success: true, message: 'Islem basariyla tamamlandi.');
    } catch (e) {
      setState(() {
        _loading = false;
      });
      if (!mounted) return;
      _showResultDialog(success: false, message: e.toString());
    }
  }

  Future<void> startPayment() async {
    await _execute(
      () => _pluspay.startPayment(
        PPStartPaymentRequestModel.toRequest(
          orderCode: '86206823',
          totalAmount: 11.9,
          paymentType: PPPaymentType.MULTINET,
          paymentMethod: PPPaymentMethod.NFC,
        ),
      ),
    );
  }

  Future<void> cancelPayment() async {
    await _execute(
      () => _pluspay.cancelPayment(
        PPCancelPaymentRequestModel.toRequest(
          orderCode: 'ORD001',
          transactionId: 'TX001',
          note: 'Test iptali',
        ),
      ),
    );
  }

  Future<void> startEftPayment() async {
    await _execute(
      () => _pluspay.startEftPayment(
        PPEftPaymentRequestModel.toRequest(
          totalAmount: 3.0,
          paymentType: PPPaymentType.POS,
          paymentMethod: PPPaymentMethod.CC,
          transactionId: Uuid().v4(),
          taxRate: 0,
        ),
      ),
    );
  }

  Future<void> cancelEftPayment() async {
    await _execute(
      () => _pluspay.cancelEftPayment(
        PPEftCancelRequestModel.toRequest(
          transactionId: Uuid().v4(),
          totalAmount: 3.0,
        ),
      ),
    );
  }

  Future<void> startOrderPayment() async {
    await _execute(
      () => _pluspay.startOrderPayment(
        PPOrderPaymentRequestModel.toRequest(
          orderCode: 'ORD001',
        ),
      ),
    );
  }

  void _showResultDialog({required bool success, required String message}) {
    showDialog(
      context: context,
      builder: (ctx) => AlertDialog(
        icon: Icon(
          success ? Icons.check_circle : Icons.error,
          color: success ? Colors.green : Colors.red,
          size: 48,
        ),
        title: Text(success ? 'Basarili' : 'Hata'),
        content: Text(message),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(ctx),
            child: const Text('Tamam'),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Pluspay A2A Example')),
      body: _loading
          ? const Center(child: CircularProgressIndicator())
          : ListView(
              padding: const EdgeInsets.all(16),
              children: [
                SectionHeader(title: 'Odeme'),
                ActionButton(
                  icon: Icons.payment,
                  label: 'Odeme Baslat',
                  onTap: startPayment,
                ),
                ActionButton(
                  icon: Icons.cancel,
                  label: 'Odeme Iptal',
                  color: Colors.red,
                  onTap: cancelPayment,
                ),
                const SizedBox(height: 24),
                SectionHeader(title: 'EFT POS'),
                ActionButton(
                  icon: Icons.credit_card,
                  label: 'EFT Odeme',
                  onTap: startEftPayment,
                ),
                ActionButton(
                  icon: Icons.cancel,
                  label: 'EFT Iptal',
                  color: Colors.red,
                  onTap: cancelEftPayment,
                ),
                const SizedBox(height: 24),
                SectionHeader(title: 'Siparis'),
                ActionButton(
                  icon: Icons.receipt_long,
                  label: 'Siparis Odeme',
                  onTap: () => _execute(
                    () => _pluspay.startOrderPayment(
                      PPOrderPaymentRequestModel.toRequest(
                        orderCode: 'ORD001',
                      ),
                    ),
                  ),
                ),
                const SizedBox(height: 24),
                SectionHeader(title: 'Siparis Olustur'),
                ActionButton(
                  icon: Icons.add_shopping_cart,
                  label: 'Siparis Olustur',
                  onTap: () => _execute(
                    () => _pluspay.createOrder(
                      PPOrderCreateRequest.toRequest(
                        orderCode: generateOrderCode,
                        orderDate: DateTime.now(),
                        products: [
                          ProductModel(
                            id: 1,
                            sku: 'SKU001',
                            unit: PPQtyEnums.ADET,
                            price: 100.0,
                            title: 'Test Urun 1',
                            quantity: 1,
                            taxRate: 20,
                            vatInclude: true,
                            productType: PPProductTypeEnum.PHYSICALLY,
                            discountValue: 0,
                          ),
                        ],
                      ),
                    ),
                  ),
                ),
                const SizedBox(height: 24),
                SectionHeader(title: 'Coklu Odeme'),
                ActionButton(
                  icon: Icons.payments,
                  label: 'Coklu Odeme',
                  onTap: () => _execute(
                    () => _pluspay.startMultiPayment(
                      PPMultiPaymentRequest.toRequest(
                        changePaymentStatus: true,
                        orderCode: generateOrderCode,
                        orderDate: DateTime.now(),
                        products: [
                          ProductModel(
                            id: 1,
                            sku: 'SKU001',
                            unit: PPQtyEnums.ADET,
                            price: 100.0,
                            title: 'Test Urun 1',
                            quantity: 1,
                            taxRate: 20,
                            vatInclude: true,
                            productType: PPProductTypeEnum.PHYSICALLY,
                            discountValue: 0,
                          ),
                        ],
                        transactions: [
                          TransactionModel(
                            paymentType: PPPaymentType.BANK_TRANSFER,
                            totalAmount: 50.0,
                            paymentMethod: PPPaymentMethod.NONE,
                          ),
                          TransactionModel(
                            paymentType: PPPaymentType.BANK_TRANSFER,
                            totalAmount: 50.0,
                            paymentMethod: PPPaymentMethod.NONE,
                          ),
                        ],
                      ),
                    ),
                  ),
                ),
                const SizedBox(height: 24),
                SectionHeader(title: 'Diger'),
                ActionButton(
                  icon: Icons.summarize,
                  label: 'Gun Sonu',
                  onTap: () => _execute(
                    () => _pluspay.triggerEod(
                      PPEodRequestModel.toRequest(
                        isAll: false,
                        types: [PPEodType.POS, PPEodType.MULTINET],
                      ),
                    ),
                  ),
                ),
                ActionButton(
                  icon: Icons.settings,
                  label: 'Parametre Yükle',
                  onTap: () => _execute(
                    () => _pluspay.triggerParameters(
                      PPParameterRequestModel.toRequest(
                        isAll: true,
                        types: [
                          PPParameterTypes.bank,
                          PPParameterTypes.multinet,
                        ],
                      ),
                    ),
                  ),
                ),
              ],
            ),
    );
  }
}
0
likes
160
points
85
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

PlusPay A2A (app-to-app) payment plugin for Android POS devices — start payments, EOD, refunds and transaction queries.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

android_intent_plus, flutter, freezed_annotation, intl, plugin_platform_interface

More

Packages that depend on pluspay_a2a

Packages that implement pluspay_a2a