payme_miniapp_flutter 1.0.0 copy "payme_miniapp_flutter: ^1.0.0" to clipboard
payme_miniapp_flutter: ^1.0.0 copied to clipboard

outdated

PayME Miniapp Flutter is plugin for application integrate with PayME Platform

example/lib/main.dart

import 'dart:math';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:payme_miniapp_flutter/payme_miniapp_flutter.dart';
import 'package:payme_miniapp_flutter/payme_miniapp_type.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Your App Title',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  HomeScreenState createState() => HomeScreenState();
}

class HomeScreenState extends State<HomeScreen> {
  String? selectedService;
  String phoneNumber = '0347665645';
  String env = "PRODUCTION";
  TextEditingController _phoneNumberController = TextEditingController();

  List<Map<String, String>> services = [
    {"label": "POWE", "value": "POWE"},
    {"label": "WATE", "value": "WATE"},
    {"label": "ADSL", "value": "ADSL"},
    {"label": "TIVI", "value": "TIVI"},
    {"label": "MOBILE_CARD", "value": "MOBILE_CARD"},
    {"label": "MOBILE_TOPUP", "value": "MOBILE_TOPUP"},
    {"label": "GAME_CARD", "value": "GAME_CARD"},
    {"label": "PPMB", "value": "PPMB"}
  ];

  List<Map<String, String>> enviroment = [
    {"label": "PRODUCTION", "value": "PRODUCTION"},
    {"label": "SANDBOX", "value": "SANDBOX"},
  ];

  @override
  void initState() {
    super.initState();
    initPlatformState();
    _phoneNumberController.text = phoneNumber;

    init();

    PaymeMiniappFlutter.onResponse.listen((dynamic response) {
      if (response != null) {
        _showResponseDialog(response.toString(), "Response");
      }
    });

    // Listen to error events
    PaymeMiniappFlutter.onError.listen((dynamic error) {
      if (error != null) {
        _showResponseDialog(error.toString(), "Error");
      }
    });
  }

  Future<void> initPlatformState() async {
    if (!mounted) return;
  }

  Future<void> onOpenMiniApp() async {
    PayMEOpeningParam openingParam = PayMEOpeningParam.open(phone: phoneNumber);

    await PaymeMiniappFlutter.open(PayMEOpeningType.modal, openingParam);
  }

  Future<void> onOpenService(String? service) async {
    PayMEOpeningParam openingParam = PayMEOpeningParam.service(
        phone: phoneNumber, data: PayMEServiceParam(service: service ?? ''));

    await PaymeMiniappFlutter.open(PayMEOpeningType.modal, openingParam);
  }

  Future<void> init() async {
    env == "SANDBOX"
        ? await PaymeMiniappFlutter.init(
            '250069027220',
            '-----BEGIN PUBLIC KEY-----\nMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIB6eR2SMUCqy7LkXmVF1xf37pJn5yCp\nGMGpOd6fc/dFkqIkNBDHoTRIhMdBucauf3i7S2g+fl6g+Kte4MlaYkcCAwEAAQ==\n-----END PUBLIC KEY-----',
            '-----BEGIN RSA PRIVATE KEY-----MIIBOgIBAAJBAIB6eR2SMUCqy7LkXmVF1xf37pJn5yCpGMGpOd6fc/dFkqIkNBDH\noTRIhMdBucauf3i7S2g+fl6g+Kte4MlaYkcCAwEAAQJAUlyxGfjnJBqZvRPTQ77y\n9cWWJjr/mxtr6HJwy7uSnvgNRY1zfpRLccR4NvMS7LtgK47sx1vJmCOgtVCGwCVU\nUQIhALlGTGM1Q4E5L2xCX0SfCY6vdKOdwvD5NyaUSP7ZJVf/AiEAsYXYoEApSorj\ntLg4JjLJhpE8H8Lf6o1AFpX9g83aNbkCICRY1zmLRIAAcP5DEx+KN7zHTRGgLJNL\nwPcPljZw8TOPAiEAg1P0XSD6KwYyzEgYadHamm2pIAoHorpaNhtCEBbinikCIFtk\n7by4tboFtUkXf7X+/Y1jX1owrT4xDO2sBKrUs/9F\n-----END RSA PRIVATE KEY-----',
            env: PayMEEnv.SANDBOX)
        : await PaymeMiniappFlutter.init(
            '441211807214',
            '-----BEGIN PUBLIC KEY-----\nMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIVcNKKCs2ekpUcmCnmShO9nNOH7NQtC\n22tOVYwPSsy/BTWNZR+1V36yXPnVRSUTd7OSTuxL5Rs+T6nyRGk7rtECAwEAAQ==\n-----END PUBLIC KEY-----',
            '-----BEGIN RSA PRIVATE KEY-----\nMIICWwIBAAKBgFsj37SXIxgLdXXUhIc6Yq7Ccb9EmyieYhg3Kd2DUe9qV7SwN9s9\nSDTXZqkn1UCbnzSeaNlLeeKzuEf4iBxTqbf7E9Yd3o/HVB8vV8WlI1Qh484SStxq\nSZec1wJ31feVb+ID+ZmczfWAt7GcEOX2guUxLATNKfOgj8idJuxqzLG3AgMBAAEC\ngYBDUzDBmpPWA0D1ldOAgWS8a+7St79WNgmIkddfRs6T6R5432OjlJVuU2AGvOIP\nI+ZrXElfmx2ildgfcjw5kKPh3pLQlI0C3hnrL4Z6KuSHkyF6tsyzVLZs4oBPeNgP\nQc54JAfD+CCLjbCvcZpzdf0xIXmJe+DlWSVwjOPSIqytoQJBAKGh8/0oAk3qLFCI\noKi9ENOGiLQj9YjqG9900GizBcSgHSAUmQ4syHSiCnTFq3MH7hhCDAKmCEV52I9v\nTWwISBMCQQCQWew933wB8cdVFMRmUDWvqC5KKqfXMI9tXC2Rn9L81yl0JnIfIsZN\nGpix2WJRpK5icdBno6lkzP9VgSOlXWxNAkEAnFXGZh11pSEUPcz5AFzm0oG05fBG\nBGjUDt2w2yQVNyrbIPVrWR+Nv+ofjPTIsVmBPOtdLI6lP3XsNkgkrZKRCwJAYRca\nfsNCdUxZ9i/xqZ9pfKxx9hCas3JGBhhpzfjhwI43o5f4SljpaBLrgTPlnWRWpoBG\n3G6IEPSRCMHDaAZeQQJAfhfDlJzEik4gzt/JBzHDIW6v4eWA7CxReUXGtf3MLDD/\nYYXcc/Usc13UuGZ+7vYIXgJIQzVoHk+ZYw7fgDFBKQ==\n-----END RSA PRIVATE KEY-----',
            env: PayMEEnv.PRODUCTION);
  }

  Future<void> getBalance() async {
    await PaymeMiniappFlutter.getBalance(phoneNumber);
  }

  Future<void> getAccountInfo() async {
    await PaymeMiniappFlutter.getAccountInfo(phoneNumber);
  }

  Future<void> pay() async {
    PayMEOpeningParam openingParam = PayMEOpeningParam.pay(
        phone: phoneNumber,
        data: PayMEPaymentParam(
            amount: 10000,
            transactionId: generateRandomSixDigitNumber().toString(),
            note: "note"));

    await PaymeMiniappFlutter.open(PayMEOpeningType.modal, openingParam);
  }

  int generateRandomSixDigitNumber() {
    // Create a Random object
    Random random = Random();

    // Generate a random 6-digit number
    int min = 100000;
    int max = 999999;
    return min + random.nextInt(max - min);
  }

  Future<void> _showResponseDialog(String response, String type) async {
    return showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(type),
          content: Text(response),
          actions: [
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).pop();
              },
              child: const Text('OK'),
            ),
          ],
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: () {
          FocusManager.instance.primaryFocus?.unfocus();
        },
        child: Scaffold(
          appBar: AppBar(
            title: const Text('Plugin example app'),
          ),
          body: Center(
            child: Column(
              children: [
                TextField(
                  controller: _phoneNumberController,
                  onChanged: (value) {
                    setState(() {
                      phoneNumber = value;
                    });
                  },
                  keyboardType: TextInputType.number,
                  decoration: const InputDecoration(
                      labelText: 'Nhập số điện thoại',
                      contentPadding: EdgeInsets.symmetric(horizontal: 16)),
                ),
                const SizedBox(height: 30),
                Center(
                    child: Row(
                  children: [
                    DropdownButton(
                      padding: const EdgeInsets.symmetric(horizontal: 16),
                      value: env,
                      items: enviroment.map((Map<String, String> enviroment) {
                        return DropdownMenuItem<String>(
                          value: enviroment["value"]!,
                          child: Text(enviroment["label"]!),
                        );
                      }).toList(),
                      onChanged: (String? value) {
                        setState(() {
                          env = value!;
                        });
                      },
                    ),
                    ElevatedButton(
                      onPressed: init,
                      child: const Text('Change Enviroment'),
                    )
                  ],
                )),
                const SizedBox(height: 30),
                ElevatedButton(
                  onPressed: onOpenMiniApp,
                  child: const Text('Open Mini App'),
                ),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: getBalance,
                  child: const Text('Get Balance'),
                ),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: getAccountInfo,
                  child: const Text('Get Account Info'),
                ),
                const SizedBox(height: 16),
                Center(
                  child: Container(
                    constraints: BoxConstraints(
                        maxWidth: MediaQuery.of(context).size.width * 0.8),
                    padding: const EdgeInsets.all(16.0),
                    child: Row(
                      children: [
                        Expanded(
                          child: DropdownButton<String>(
                            value: selectedService,
                            items: services.map((Map<String, String> service) {
                              return DropdownMenuItem<String>(
                                value: service["value"]!,
                                child: Text(service["label"]!),
                              );
                            }).toList(),
                            onChanged: (String? newValue) {
                              setState(() {
                                selectedService = newValue;
                              });
                            },
                            hint: const Text('Select a service'),
                          ),
                        ),
                        const SizedBox(width: 16),
                        ElevatedButton(
                          onPressed: () {
                            if (selectedService != null) {
                              // Add your logic to handle the selected service
                              onOpenService(selectedService);
                              print('Selected Service: $selectedService');
                            } else {
                              print('Please select a service.');
                            }
                          },
                          child: const Text('Open'),
                        ),
                      ],
                    ),
                  ),
                ),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: pay,
                  child: const Text('Pay'),
                ),
              ],
            ),
          ),
        ));
  }
}
0
likes
0
points
217
downloads

Publisher

unverified uploader

Weekly Downloads

PayME Miniapp Flutter is plugin for application integrate with PayME Platform

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on payme_miniapp_flutter

Packages that implement payme_miniapp_flutter