flutter_square_pos
A flutter plugin to use square POS(point of sale) api.
Square supports sdk of POS for Andoid and iOS but not supported for flutter. This library bundles them for flutter.
Setup
Common
Installation
Add flutter_square_pos
to depencency
in pubspec.yaml
of your project.
depencendies:
flutter_square_pos: ^1.0.0
Define applicationId of square on code of your app
Get Application ID from developper dashboard and define it on your app.
For example on main.dart
.
var squareApplicationId = 'sq0idp-sEIatSPRxB2uxxxxxxx';
Android
Register Android app info to square account
Fingerprint and package name are required.
Andorid | Register your application
Change minSdkVersino for uni_links.
This plugin uses uni_links for iOS but Android also need to support it.
To build it, set minSdkVersion
as 23 in android/build.gradle
of your project.
android {
defaultConfig {
minSdkVersion 23 // required to set
}
}
iOS
Activate url scheme
Register iOS app info to square account
Bunde id and URL scheme are required.
iOS | Register your application
Define url schema in dart code
For example on main.dart
.
var squareCallbackURL = 'your-ios-url-scheme://';
Usage
Import
import 'package:flutter_square_pos/flutter_square_pos.dart';
createClient
Call createClient
once.
This sample calls createClient on initState.
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
FlutterSquarePos.createClient(squareApplicationId)
}
}
startTransaction
By calling startTransaction, you can get client_transaction_id or error information.
int amount = 809;
String currency = 'JPY';
Map<String, String> result = await FlutterSquarePos.startTransaction(
amount,
currency,
tenderTypes: ['CARD', 'CARD_ON_FILE', 'CASH', 'OTHER'])
callbackURL: squareCallbackURL, // Required for iOS
skipReceipt: true); // skipReceipt support only for iOS
if (result.containsKey("errorCode")) {
setState(() {
_result = result["errorCode"];
});
showDialog(
context: this.context,
builder: (context) => AlertDialog(
title: Text(result["errorCode"] ?? ""),
content: Text(result["errorMessage"] ?? ""),
actions: [
TextButton(
child: Text('close'),
onPressed: () => Navigator.pop(context, false))
],
),
);
} else {
setState(() {
_result = result["clientTransactionId"];
});
}
License
MIT