littlefishpay_mypinpad_sdk 0.0.1
littlefishpay_mypinpad_sdk: ^0.0.1 copied to clipboard
The littlefishpay mypinpad sdk plugin implementation.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:dartz/dartz.dart' as dz;
import 'package:littlefish_interfaces/pos_result_interface.dart';
import 'package:flutter/services.dart';
import 'package:littlefishpay_mypinpad_sdk/littlefishpay_mypinpad_sdk.dart';
import 'package:littlefishpay_mypinpad_sdk/mypinpad_card_payment_gateway.dart';
import 'transaction_dialog.dart';
void main() {
runApp(
const MaterialApp(
home: MyApp(),
),
);
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _result = "Initializing Terminal Please Wait....";
final mppCardPaymentGateway = MypinpadCardPaymentGateway();
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
String platformVersion = 'Initializing....';
try {
platformVersion = await LittlefishpayMypinpadSdk.createTerminal(
primaryColorHex: "#800080",
appName: "SimplyPurple",
isoCurrencyCode: 710) ??
'Unknown MyPinPad SDK version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
Map<String, dynamic> parsedData = json.decode(platformVersion);
setState(() {
_result = parsedData["message"];
});
}
Future<void> purchase(double amount) async {
String result = 'Purchase Failed';
try {
result = await LittlefishpayMypinpadSdk.purchase(amount) ??
'Unknown platform version';
} on PlatformException {
result = 'Purchase Failed';
}
if (!mounted) return;
Map<String, dynamic> parsedData = json.decode(result);
setState(() {
_result = parsedData["transactionResponse"];
});
}
Future<void> purchaseViaGateway(double amount) async {
dz.Either<String, POSResultInterface> response;
POSResultInterface? result;
String? resultString;
try {
response = await mppCardPaymentGateway.charge(amount.toString());
response.fold(
(l) => resultString = l,
(r) => result = r,
);
} on PlatformException {
resultString = 'Purchase Failed';
}
if (!mounted) return;
{
if (result != null) {
Map<String, dynamic> parsedData = result!.resultObject;
setState(() {
_result = parsedData["transactionResponse"];
});
} else {
setState(() {
_result = resultString ?? 'No result';
});
}
}
}
Future<void> disposeTerminal() async {
String result = 'Terminal Dispose Failed';
try {
result = await LittlefishpayMypinpadSdk.disposeTerminal() ??
'Unknown platform version';
} on PlatformException {
result = 'Terminal Dispose Failed';
}
if (!mounted) return;
Map<String, dynamic> parsedData = json.decode(result);
setState(() {
_result = parsedData["transactionResponse"];
});
}
Future<void> openSDK() async {
String result = 'Open SDK Failed';
try {
result =
await LittlefishpayMypinpadSdk.openSDK ?? 'Unknown platform version';
} on PlatformException {
result = 'Open SDK Failed';
}
if (!mounted) return;
setState(() {
_result = result;
});
}
Future<void> refund(double amount) async {
String result = 'Refund Failed';
try {
result = await LittlefishpayMypinpadSdk.refund(amount) ??
'Unknown platform version';
} on PlatformException {
result = 'Refund Failed';
}
if (!mounted) return;
Map<String, dynamic> parsedData = json.decode(result);
setState(() {
_result = parsedData["transactionResponse"];
});
}
Future<void> refundViaGateway(double amount) async {
dz.Either<String, POSResultInterface> response;
POSResultInterface? result;
String? resultString;
try {
response = await mppCardPaymentGateway.refund(amount.toString());
response.fold(
(l) => resultString = l,
(r) => result = r,
);
} on PlatformException {
resultString = 'Refund Failed';
}
if (!mounted) return;
{
if (result != null) {
Map<String, dynamic> parsedData = result!.resultObject;
setState(() {
_result = parsedData["transactionResponse"];
});
} else {
setState(() {
_result = resultString ?? 'No result';
});
}
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('My PinPad Example App'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('Result: $_result\n'),
// Button to open the terminal
ElevatedButton(
onPressed: () async {
if (_result == "Initializing Terminal Please Wait....") {
return;
}
await openSDK();
},
style: ElevatedButton.styleFrom(
foregroundColor:
_result == "Initializing Terminal Please Wait...."
? Colors.grey
: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
child: const Text('Open Terminal'),
),
const SizedBox(height: 32),
// Button to perform a transaction
ElevatedButton(
onPressed: () {
if (_result == "Initializing Terminal Please Wait....") {
return;
}
showDialog(
context: context,
builder: (context) {
return TransactionDialog(
onPurchase: (amount) async {
await purchaseViaGateway(amount);
},
);
},
);
},
style: ElevatedButton.styleFrom(
foregroundColor:
_result == "Initializing Terminal Please Wait...."
? Colors.grey
: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
child: const Text('Perform Transaction'),
),
const SizedBox(height: 32),
// Button to perform a refund
ElevatedButton(
onPressed: () async {
if (_result == "Initializing Terminal Please Wait....") {
return;
}
showDialog(
context: context,
builder: (context) {
return TransactionDialog(
onPurchase: (amount) async {
await refundViaGateway(amount);
},
);
},
);
},
style: ElevatedButton.styleFrom(
foregroundColor:
_result == "Initializing Terminal Please Wait...."
? Colors.grey
: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
child: const Text('Perform Refund'),
),
const SizedBox(height: 32),
ElevatedButton(
onPressed: () async {
if (_result == "Initializing Terminal Please Wait....") {
return;
}
await disposeTerminal();
},
style: ElevatedButton.styleFrom(
foregroundColor:
_result == "Initializing Terminal Please Wait...."
? Colors.grey
: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
child: const Text('Dispose Terminal'),
),
const SizedBox(height: 32),
],
),
),
),
);
}
}