teya_pos_sdk 1.0.5 copy "teya_pos_sdk: ^1.0.5" to clipboard
teya_pos_sdk: ^1.0.5 copied to clipboard

Flutter plugin for Teya PosLink SDK (Android only)

Teya PosLink SDK - Flutter Payment Terminal Integration #

pub package Flutter Android License

A Flutter plugin that provides access to the Teya PosLink SDK for Android. This plugin allows you to integrate Teya payment terminals into your Flutter applications.

Author: Khizar Rehman

⚠️ Platform Support Notice: This plugin currently supports Android only. iOS support is not available as the Teya SDK does not provide iOS support yet.

Features #

  • ✅ Initialize Teya SDK with configuration
  • ✅ Setup PosLink integration
  • ✅ Process card payments
  • ✅ Real-time payment state updates
  • ✅ Cancel payments
  • ✅ Support for multiple currencies (GBP, EUR, USD)
  • ✅ Android support
  • ❌ iOS support (not available - Teya SDK limitation)

📦 Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  teya_pos_sdk: ^1.0.5

Then run:

flutter pub get

⚙️ Setup #

Android Configuration #

  1. Minimum SDK Version

    Ensure your android/app/build.gradle has a minimum SDK version of 24:

    android {
        defaultConfig {
            minSdkVersion 24
        }
    }
    
  1. Permissions

    Add the following permissions to your android/app/src/main/AndroidManifest.xml:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

🚀 Quick Start Guide #

Basic Usage #

1. Initialize the SDK #

import 'package:teya_pos_sdk/teya_pos_sdk.dart';

final teyaSdk = TeyaSdk.instance;

// Initialize with sandbox configuration
final config = TeyaConfig.sandbox(
  clientId: 'your-client-id',
  clientSecret: 'your-client-secret',
);

await teyaSdk.initialize(config);

// Check if SDK is ready for UI operations
final uiStatus = await teyaSdk.isReadyForUI();
if (uiStatus['isReady']) {
  await teyaSdk.setupPosLink();
} else {
  print('SDK not ready for UI operations');
}

2. Make a Payment #

// Make a payment in GBP
final result = await teyaSdk.makePaymentGBP(
  amountInPounds: 5.50,
);

if (result.isSuccess) {
  print('Payment successful! Transaction ID: ${result.transactionId}');
} else {
  print('Payment failed: ${result.errorMessage}');
}

3. Listen to Payment State Changes #

teyaSdk.paymentStateStream.listen((state) {
  print('Payment state: ${state.state}');
  print('Is final: ${state.isFinal}');
  
  if (state.isFinal) {
    switch (state.state) {
      case PaymentState.successful:
        // Handle successful payment
        break;
      case PaymentState.cancelled:
        // Handle cancelled payment
        break;
      case PaymentState.processingFailed:
        // Handle failed payment
        break;
    }
  }
});

4. Check UI Readiness #

// Check if the SDK is ready for UI operations before setup
final uiStatus = await teyaSdk.isReadyForUI();
if (uiStatus['isReady']) {
  await teyaSdk.setupPosLink();
} else {
  print('SDK not ready for UI operations');
  print('Has activity: ${uiStatus['hasActivity']}');
  print('Has SDK: ${uiStatus['hasSDK']}');
}

API Reference #

TeyaSdk #

The main class for interacting with the Teya SDK.

Methods

  • initialize(TeyaConfig config) - Initialize the SDK
  • setupPosLink() - Setup PosLink integration
  • makePayment({required int amount, required String currency, String? transactionId, int? tip}) - Make a payment
  • makePaymentWithMajorUnits({required double amount, required String currency, String? transactionId, double? tip}) - Make a payment with amount in major currency units
  • makePaymentGBP({required double amountInPounds, String? transactionId, double? tipInPounds}) - Make a payment in GBP
  • makePaymentEUR({required double amountInEuros, String? transactionId, double? tipInEuros}) - Make a payment in EUR
  • makePaymentUSD({required double amountInDollars, String? transactionId, double? tipInDollars}) - Make a payment in USD
  • cancelPayment() - Cancel the current payment
  • isReadyForUI() - Check if the SDK is ready for UI operations
  • dispose() - Dispose the SDK and clean up resources

Properties

  • paymentStateStream - Stream of payment state changes
  • isInitialized - Whether the SDK is initialized

TeyaConfig #

Configuration for the Teya SDK.

Constructors

  • TeyaConfig({required String teyaIdHostUrl, required String teyaApiHostUrl, required String clientId, required String clientSecret, bool isProduction = false})
  • TeyaConfig.sandbox({required String clientId, required String clientSecret})
  • TeyaConfig.production({required String clientId, required String clientSecret})

PaymentState #

Enum representing payment states:

  • new_ - Payment is new
  • inProgress - Payment is in progress
  • pending - Payment is pending
  • successful - Payment was successful
  • cancelled - Payment was cancelled
  • cancelling - Payment is being cancelled
  • processingFailed - Payment processing failed
  • communicationFailed - Communication with terminal failed

PaymentResult #

Result of a payment operation.

Properties

  • isSuccess - Whether the payment was successful
  • transactionId - Transaction ID
  • eposTransactionId - ePOS transaction ID
  • finalState - Final payment state
  • errorMessage - Error message if payment failed
  • metadata - Additional metadata

Error Handling #

The plugin throws TeyaError exceptions for various error conditions:

try {
  await teyaSdk.makePaymentGBP(amountInPounds: 10.0);
} on TeyaError catch (e) {
  print('Teya error: ${e.code} - ${e.message}');
} catch (e) {
  print('Unexpected error: $e');
}

Troubleshooting #

Common Issues #

1. SDK Navigation Not Working

If the Teya setup UI opens but navigation doesn't work when clicking buttons:

Solution: Ensure the SDK is ready for UI operations before calling setupPosLink():

// Check UI readiness first
final uiStatus = await teyaSdk.isReadyForUI();
if (!uiStatus['isReady']) {
  print('SDK not ready for UI operations');
  return;
}

await teyaSdk.setupPosLink();

2. Activity Context Not Available

If you get "Activity context is not available" error:

Solution: Make sure you're calling the SDK methods from a Flutter widget that has an active Android activity context. The SDK needs an activity context to display UI.

3. Setup Failed Errors

If setupPosLink() fails:

Solution: Check the Android logs for detailed error information:

flutter logs

Look for logs with the "TeyaSDK" tag for detailed debugging information.

4. Platform Not Supported on iOS

If you get platform not supported errors on iOS:

Solution: This plugin only supports Android. The Teya SDK does not provide iOS support yet.

Example #

See the example/ directory inside this plugin for a complete example application demonstrating how to use the plugin.

To run the example:

cd example
flutter pub get
flutter run

Requirements #

  • Flutter 3.10.0 or higher
  • Dart 3.0.0 or higher
  • Android API level 24 or higher (iOS not supported)
  • Teya SDK (included in the plugin)

Platform Support #

Platform Support Status Notes
Android ✅ Supported Full functionality available
iOS ❌ Not Supported Teya SDK does not provide iOS support

iOS Compatibility #

If you try to use this plugin on iOS, you will receive a clear error message:

try {
  await teyaSdk.initialize(config);
} on TeyaError catch (e) {
  if (e.code == TeyaErrorCodes.platformNotSupported) {
    print('iOS is not supported: ${e.message}');
    // Handle iOS not supported case
  }
}

License #

This plugin is provided as-is. Please refer to Teya's licensing terms for the underlying SDK.

Support #

For issues related to this Flutter plugin, please create an issue in the repository. For Teya SDK specific issues, please contact Teya support.

6
likes
160
points
14
downloads

Publisher

verified publisherkhizarrehman.com

Weekly Downloads

Flutter plugin for Teya PosLink SDK (Android only)

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on teya_pos_sdk

Packages that implement teya_pos_sdk