flutter_billpocket 0.0.1 flutter_billpocket: ^0.0.1 copied to clipboard
Flutter implementation of Billpocket for Android
Billpocket Plugin #
Introducing Billpocket: Simplifying Mobile Card Payments and Terminal Integration for Flutter
Show some ❤️ and star the repo to support the project
Getting Started #
Android #
You need to add the following permissions in android to request bluetooth access
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Dart #
Set your Billpocket token and development environment.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Billpocket.config(
isProduction: true,
token: '{YOUR_TOKEN}');
runApp(const MyAppPage());
}
Documentation #
SDK status #
You can check the status of the SDK initialization by calling the following line of code:
await Billpocket.getStatusSDK();
Which will return a bool
value.
Terminal list #
You can get the list of all the terminals that have been paired via bluetooth with the following method:
await Billpocket.getReaders();
Which will return a List<Reader>
value.
Connect terminal #
Once you have chosen a terminal you must call the following method sending the parameters obtained in Reader
:
await Billpocket.connectReader(
readerType: readerType,
readerMacAddress: readerMacAddress,
name: name);
Which will return a bool
value.
Start a transaction #
await Billpocket.doTransaction(
amount: "10",
tip: "0",
latitude: 19.42691938620286,
longitude: -99.16780320031096,
description: "description");
Running this method will trigger a stream of events.
Billpocket.transactionStream().listen((event) {
final eventName = event['event'];
final message = event['message'];
switch (eventName) {
case 'onTransactionAborted':
// Handle the onTransactionAborted event
print('Transaction aborted: $message');
break;
case 'onBeforeTransaction':
// Handle the onBeforeTransaction event
print('Transaction before: $message');
break;
case 'onCardRead':
// Handle the onCardRead event
print('Transaction card read: $message');
break;
case 'getSignature':
// Handle the getSignature event
print('Transaction get signature: $message');
break;
case 'onReaderWaitingForCard':
// Handle the onReaderWaitingForCard event
print('Transaction reader waiting for card: $message');
break;
case 'onMsiDefined':
// Handle the onMsiDefined event
final list = event['list'];
print('Transaction msi defined: $message');
print('MSI list: $list');
showMSI(list);
break;
case 'onGetPin':
// Handle the onGetPin event
print('Transaction get pin: $message');
break;
case 'onMagneticCardFound':
// Handle the onMagneticCardFound event
print('Transaction magnetic card found: $message');
break;
case 'onTransactionFinished':
// Handle the onTransactionFinished event
print('Transaction finished: $message');
break;
case 'onTransactionSuccessful':
// Handle the onTransactionSuccessful event
print('Transaction successful: $message');
break;
case 'resultStartTransaction':
// Handle the resultStartTransaction event
print('Transaction result start: $message');
break;
case 'resultStartTransactionSuccess':
// Handle the resultStartTransactionSuccess event
print('Transaction result start success: $message');
break;
case 'resultStartTransactionError':
// Handle the resultStartTransactionError event
print('Transaction result start error: $message');
break;
// Handle other events similarly
default:
print('Unknown event received: $eventName');
break;
}
Explanation of events
-
onGetPin and getSignature: These methods will open native screens so there is no need to handle the response.
-
onMsiDefined: This method will return a string that must be parsed to get a
List<Installment>
. Please review the example. -
other methods: These methods are transactional so it depends on the use case.
Months without interest #
If the amount you have entered in doTransaction
exceeds the limit of months without interest, the onMsiDefined event explained above will be triggered. As a list will be obtained and an interest-free months option must be chosen to continue with the transaction, you must call the following method sending the chosen parameters in Installment:
Billpocket.continueWithMsi(
commission: installment[pos].commission!,
installments: installment[pos].value!,
minAmount: installment[pos].minAmount!,
);
Calling that method will continue the flow in the stream explained above.
Issues #
Please file any issues, bugs, or feature requests in the GitHub repo.
Contributing #
If you wish to contribute a change to this repo, please send a pull request.
Acknowledgments #
This package was originally created by Abel Tarazona and Jared González.