payorc_flutter_v2 1.0.5
payorc_flutter_v2: ^1.0.5 copied to clipboard
A Flutter plugin for orc payment.
payorc_flutter_v2 #
Flutter SDK for PayOrc checkout: payment method sheet (Apple Pay, Google Pay, Tabby, Samsung Pay, pay with card), add-card flow, and related UI. Merchant keys and the PayOrc service SDK drive checkout customization (colors, available methods, wallet JSON).
Requirements #
- Flutter SDK compatible with this package’s
pubspec.yamlconstraints. - A PayOrc merchant key and merchant secret.
- Optional Tabby credentials if you enable Tabby (
tabbyApiKey).
Installation #
Add the dependency (path or pub.dev version):
dependencies:
payorc_flutter_v2: ^1.0.5
import 'package:payorc_flutter_v2/payorc_flutter_v2.dart';
App setup (required for toasts / alerts) #
The SDK uses BotToast for some alerts. Wrap your app and register observers once:
import 'package:payorc_flutter_v2/payorc_flutter_v2.dart';
runApp(
PayorcRoot(
child: MaterialApp(
navigatorObservers: [
...PayorcSdk.botToastNavigatorObservers,
],
home: const MyHomePage(),
),
),
);
Alternative: keep your existing MaterialApp and compose PayorcSdk.wrapMaterialAppBuilder into MaterialApp.builder (see API docs on PayorcSdk.wrapMaterialAppBuilder).
1. PayorcSdk.init — configure the SDK #
Call once at startup (before PayorcSdk.instance or any sheet). Loads checkout customization in the background when the default internal flags apply (see implementation).
PayorcSdk.init(
merchantKey: 'YOUR_MERCHANT_KEY',
merchantSecret: 'YOUR_MERCHANT_SECRET',
environment: PayorcEnvironment.sandbox, // or PayorcEnvironment.production
tabbyApiKey: 'pk_test_...', // optional; omit to disable Tabby
tabbyMerchantCode: 'ae', // Tabby region / merchant code (e.g. ae, sa)
language: PayorcLanguage.english, // optional; default english
);
Parameters #
| Parameter | Type | Required | Description |
|---|---|---|---|
merchantKey |
String |
yes | PayOrc merchant key. |
merchantSecret |
String |
yes | PayOrc merchant secret. |
environment |
PayorcEnvironment |
yes | sandbox or production API / gateway behavior. |
tabbyApiKey |
String? |
no | Tabby public key; when set, Tabby SDK is configured and Tabby can appear in the options sheet. |
tabbyMerchantCode |
String |
no | Tabby merchant code (default 'ae'). |
language |
PayorcLanguage |
no | SDK language / text direction (english, arabic). Default english. |
Return value #
Returns the configured PayorcSdk singleton. After init, use PayorcSdk.instance anywhere.
2. PayorcSdk.customization — host UI overrides #
Optional static call (any time after init) to override checkout-driven colors and form chrome. Omitted parameters leave previous or API-driven values in place where applicable.
PayorcSdk.customization(
inputBorderStyle: PayorcInputBorderStyle.outline,
guidanceStyle: PayorcGuidanceStyle.hint,
appBarStyle: PayorcAppBarStyle.nativeIos,
brandColor: const Color(0xFF000000),
button: const PayorcSdkButtonCustomization(
backgroundColor: Color(0xFF000000),
foregroundColor: Color(0xFFFFFFFF),
),
accentColor: const Color(0xFF000000),
text: const PayorcSdkTextCustomization(
primary: Color(0xFF111111),
secondary: Color(0xFF666666),
bodyFontFamily: PayorcSdkFontFamily.inter,
titleFontFamily: PayorcSdkFontFamily.montserrat,
fontWeight: FontWeight.w500,
fontSize: 15,
letterSpacing: 0.2,
textAlign: TextAlign.start,
maxLines: 3,
overflow: TextOverflow.ellipsis,
decoration: TextDecoration.none,
wordSpacing: 0,
softWrap: true,
shadows: const [
Shadow(color: Color(0x33000000), blurRadius: 2, offset: Offset(0, 1)),
],
fontStyle: FontStyle.normal,
),
cardFormValidation: const PayorcSdkCardFormValidationCustomization(
cardHolderNameError: CardFormError(
required: 'Card holder is required',
invalid: 'Enter first and last name',
),
cardNumberError: CardFormError(
required: 'Card number is required',
invalid: 'Enter a valid card number',
),
expiryMonthError: CardFormError(
required: 'Expiry is required',
invalid: 'Invalid month',
),
expiryYearError: CardFormError(
invalid: 'Invalid year',
),
cvvError: CardFormError(
required: 'CVV required',
invalid: '3 or 4 digits',
),
invalidCardError: CardFormError(
invalid: 'Enter a valid expiry date',
),
),
borderColor: const Color(0xFF000000),
);
Parameters #
| Parameter | Type | Description |
|---|---|---|
inputBorderStyle |
PayorcInputBorderStyle? |
outline or underline for SDK text fields. |
guidanceStyle |
PayorcGuidanceStyle? |
label or hint guidance for AppTextField input text. |
appBarStyle |
PayorcAppBarStyle? |
nativeAndroid or nativeIos for SDK app bars; platform default if unset. |
brandColor |
Color? |
Sheet / header brand fill. Fully transparent colors are ignored (fall back). |
button |
PayorcSdkButtonCustomization? |
Primary CTA styling (background, label color, outline, radius, height, loading color, etc.). Non-null fields merge with prior customization. |
accentColor |
Color? |
Secondary accent (links, highlights, borders where used). |
text |
PayorcSdkTextCustomization? |
Typography overrides: colors, bundled PayorcSdkFontFamily for body vs titles, and optional defaults (fontWeight, fontSize, letterSpacing, textAlign, line/clipping and decoration fields). Non-null fields merge with prior customization and fall back to checkout API values when unset. |
cardFormValidation |
PayorcSdkCardFormValidationCustomization? |
Add-card validator message overrides. If a message is null/empty, SDK default validation text is used. |
borderColor |
Color? |
Default border / stroke color for SDK chrome; when unset, default is #CCCCCC. |
3. PayorcSdk.instance.showOptionsSheet — payment method bottom sheet #
Presents the payment options flow: refreshes checkout customization, then shows Apple Pay / Google Pay / Tabby / Samsung Pay / pay-with-card, etc., depending on your PayOrc configuration.
await PayorcSdk.instance.showOptionsSheet(
context,
paymentRequest: request,
onAddNewCard: (CardData input) {
// User completed add-card / card details — continue checkout (e.g. submit order).
},
onApplePayResult: (Map<String, dynamic> result) {
// Wallet token payload from the `pay` package (debug / integrate as needed).
},
onGooglePayResult: (Map<String, dynamic> result) {
// Same for Google Pay.
},
onPaymentError: (Object? error) {
// Apple Pay / Google Pay or flow errors.
},
onTabbyAuthorized: () {
// Tabby authorized (if Tabby enabled).
},
onTabbyError: (Object? error) {
// Tabby rejected / error.
},
);
Parameters #
| Parameter | Type | Required | Description |
|---|---|---|---|
context |
BuildContext |
yes | Context used for theming / navigation host (see SDK implementation). |
paymentRequest |
PaymentRequest |
yes | Checkout payload (order, customer, billing, shipping, etc.). |
onAddNewCard |
void Function(CardData) |
yes | Called when the user adds or confirms card data from the flow. |
addCardRequest |
PaymentRequest? |
no | Add-card API payload; if omitted, derived via PaymentRequest.deriveForAddCard(paymentRequest). |
customizationCurrency |
String? |
no | Overrides currency for the customization refresh query. |
customizationAmount |
num? |
no | Overrides amount for the customization refresh query. |
onApplePayWalletResult |
void Function(WalletPaymentResult)? |
no | Apple Pay wallet result (typed wrapper). |
onApplePayPaymentResponse |
void Function(PaymentResponse)? |
no | Apple Pay payment API-style response when used by the integration. |
onApplePayResult |
void Function(Map<String, dynamic>)? |
no | Raw Apple Pay result map from pay. |
onGooglePayResult |
void Function(Map<String, dynamic>)? |
no | Raw Google Pay result map from pay. |
onPaymentError |
void Function(Object?)? |
no | Wallet / flow errors. |
onTabbyAuthorized |
VoidCallback? |
no | Tabby checkout authorized. |
onTabbyError |
void Function(Object?)? |
no | Tabby errors / rejection. |
onConfirm |
VoidCallback? |
no | Confirm path when shown by the sheet. |
onSamsungPay |
VoidCallback? |
no | Samsung Pay selected (when enabled). |
showOptionsSheet returns a Future<void> that completes when the modal is dismissed or the flow finishes presenting.
Enums (quick reference) #
PayorcEnvironment #
| Value | Meaning |
|---|---|
sandbox |
Sandbox / test endpoints. |
production |
Production endpoints. |
PayorcLanguage #
| Value | Effect |
|---|---|
english |
English LTR. |
arabic |
Arabic RTL. |
PayorcInputBorderStyle #
| Value | Use |
|---|---|
outline |
Bordered text fields. |
underline |
Underline-only text fields. |
PayorcGuidanceStyle #
| Value | Use |
|---|---|
label |
Show input guidance as floating label text. |
hint |
Show input guidance as hint/placeholder text. |
PayorcSdkTextCustomization #
Defined in lib/src/customization/payorc_sdk_text_customization.dart. Pass an instance as text: on PayorcSdk.customization. The constructor exposes only named parameters; every parameter is optional (null = do not override). Only non-null fields apply; each PayorcSdk.customization call merges with earlier calls and with checkout-driven defaults. New fields may be added in future SDK versions without breaking existing call sites.
Constructor shape (same order as the SDK source):
const PayorcSdkTextCustomization({
Color? primary,
Color? secondary,
PayorcSdkFontFamily? bodyFontFamily,
PayorcSdkFontFamily? titleFontFamily,
FontWeight? fontWeight,
double? fontSize,
double? letterSpacing,
TextAlign? textAlign,
int? maxLines,
TextOverflow? overflow,
TextDecoration? decoration,
double? wordSpacing,
bool? softWrap,
List<Shadow>? shadows,
FontStyle? fontStyle,
});
| Field | Type | Description |
|---|---|---|
primary |
Color? |
Primary body / title text on light surfaces (SDK primary text role; same intent as legacy textPrimary). |
secondary |
Color? |
Secondary / supporting text (same intent as legacy textSecondary). |
bodyFontFamily |
PayorcSdkFontFamily? |
Optional bundled font for body and labels. When set, overrides checkout font_name for body-scale styles unless headlines use titleFontFamily. |
titleFontFamily |
PayorcSdkFontFamily? |
Optional bundled font for display / headline / title styles. When null, bodyFontFamily or checkout font_name applies for those roles too. |
fontWeight |
FontWeight? |
Default weight for SDK text widgets where the customization is applied. |
fontSize |
double? |
Default font size for SDK text widgets where applied. |
letterSpacing |
double? |
Default letter spacing. |
textAlign |
TextAlign? |
Default text alignment. |
maxLines |
int? |
Default max lines for display text where applied. |
overflow |
TextOverflow? |
Default overflow behavior for display text. |
decoration |
TextDecoration? |
Default text decoration (underline, etc.). |
wordSpacing |
double? |
Default word spacing. |
softWrap |
bool? |
Default soft-wrap for display text. |
shadows |
List<Shadow>? |
Default text shadows. |
fontStyle |
FontStyle? |
Default font style (FontStyle.normal / FontStyle.italic). |
PayorcSdkFontFamily
Bundled font families shipped with the package (pubspec.yaml / PayorcSdkFontFamily in code). Use with bodyFontFamily and titleFontFamily. Names map to Flutter fontFamily strings (e.g. inter → "Inter").
| Value | Bundled family name |
|---|---|
roboto |
Roboto |
openSans |
Open Sans |
lato |
Lato |
lora |
Lora |
montserrat |
Montserrat |
notoSans |
Noto Sans |
notoSerif |
Noto Serif |
nunito |
Nunito |
raleway |
Raleway |
bitter |
Bitter |
inter |
Inter |
inconsolata |
Inconsolata |
ptSans |
PT Sans |
ptSerif |
PT Serif |
pridi |
Pridi |
robotoSlab |
Roboto Slab |
sourceSansPro |
Source Sans Pro |
titilliumWeb |
Titillium Web |
ubuntuMono |
Ubuntu Mono |
beVietnamPro |
Be Vietnam Pro |
chakraPetch |
Chakra Petch |
hahmlet |
Hahmlet |
zenMaruGothic |
Zen Maru Gothic |
PayorcSdkButtonCustomization #
Passed as button: on PayorcSdk.customization. Replaces the former standalone buttonColor parameter; only non-null fields apply.
| Field | Type | Description |
|---|---|---|
backgroundColor |
Color? |
Primary CTA fill (same role as former buttonColor). |
foregroundColor |
Color? |
Label / icon on the primary button. |
disabledBackgroundColor |
Color? |
Fill when the button is disabled. |
sideBorderColor |
Color? |
1px outline; use transparent to omit outline (default). |
borderRadius |
double? |
Corner radius for SDK buttons that read host defaults. |
height |
double? |
Height for default SDK buttons (LoaderButton / AppButton). |
fontWeight |
FontWeight? |
Primary CTA label weight. |
loadingIndicatorColor |
Color? |
Spinner color when LoaderButton is loading. |
PayorcSdkCardFormValidationCustomization #
Passed as cardFormValidation: on PayorcSdk.customization. Use this to override add-card validation messages field-by-field.
| Field | Type | Description |
|---|---|---|
cardHolderNameError |
CardFormError? |
Card holder name validation messages (required, invalid). |
cardNumberError |
CardFormError? |
Card number validation messages (required, invalid). |
expiryMonthError |
CardFormError? |
Expiry month validation messages (required, invalid). |
expiryYearError |
CardFormError? |
Expiry year validation messages (required, invalid). |
cvvError |
CardFormError? |
CVV validation messages (required, invalid). |
invalidCardError |
CardFormError? |
Generic invalid card/expiry format messages (required, invalid). |
CardFormError #
Used by PayorcSdkCardFormValidationCustomization to override validator message types.
| Field | Type | Description |
|---|---|---|
required |
String? |
Message shown when field is empty. |
invalid |
String? |
Message shown when format/value is invalid. |
PayorcAppBarStyle #
| Value | Use |
|---|---|
nativeAndroid |
Android-style app bar behavior. |
nativeIos |
iOS-style app bar behavior. |
PaymentViewType (on PaymentRequest) #
| Value | Meaning |
|---|---|
bottomsheet |
Present review / gateway as a bottom sheet. |
screen |
Full-screen gateway (requires extra gateway builder where applicable). |
PaymentRequestType #
| Value | Meaning |
|---|---|
submitOrder |
Pay existing checkout (paymentToken, urls, …). |
addCard |
Add-card only payload (no payment token). |
Core types #
PaymentRequest— Build withPaymentRequest.submitOrder(...)orPaymentRequest.addCard(...), or derive add-card from checkout withPaymentRequest.deriveForAddCard. Seelib/data/models/payment_request.dart.CardData— Cardholder, expiry, CVV, optional email/phone, tokens for saved cards. Seelib/data/models/card_data.dart.PayorcSdk.instance— Throws ifPayorcSdk.initwas not called; usePayorcSdk.isInitializedto guard.
Related APIs (short) #
| API | Purpose |
| ------------------------------------------ | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | --- |
| |
| |
| |
| PayOrc.addNewCard / PayOrc.submitOrder | Lower-level add-card and submit-order sheet helpers (src/payorc.dart). |
| |
License #
See the repository or package metadata for license terms.