sadadpay_flutter 0.0.5 copy "sadadpay_flutter: ^0.0.5" to clipboard
sadadpay_flutter: ^0.0.5 copied to clipboard

Sadad Flutter SDK for facilitating integration with Sadad Payments REST APIs into your mobile app.

Sadad Flutter SDK #

Sadad SDK for facilitating integration with Sadad REST APIs into your mobile app.

Features #

  • Generate Refresh Token
  • Generate Access Token
  • Create an Invoice
  • Get an Invoice by id
  • Provide a Web View for Payment Process

Installation #

Use this package as a library

Run this command:

With Flutter:

$flutter pub add sadadpay_flutter

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  sadadpay_flutter: ^0.0.3

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it, Now in your Dart code, you can use:

import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/interceptors/authorization_interceptor.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/service/payment_status.dart';
import 'package:sadadpay_flutter/service/sadad_service.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';

Code Snapshot Details #

To generate refresh token using clientkey and clientsecret, you can use generateRefreshToken method which is return json object.

sadadPay.generateRefreshToken(clientKey: _clientKey, clientSecret: _clientSecret).then(
        (value) => _refreshToken = value['response']['refreshToken']);

To generate access token, you can use generateAccessToken method which is return json object.

sadadPay.generateAccessToken(refreshToken: _refreshToken).then(
        (value) => _accessToken = value['response']['accessToken']);

To create invoice, you can use createInvoice method which is return json object.

final invoices = {
    "Invoices": [
      {
        "amount": "10",
        "customer_Name": "customer",
        "customer_Email": "customer@example.com",
        "lang": "en",
        "currency_Code": "KWD",
        "items": [
          {"name": "x", "quantity": 2, "amount": 2},
          {"name": "y", "quantity": 6, "amount": 1}
        ]
      }
    ]
  };

sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
        (value) => setState(() => _invoiceId = value['response']['invoiceId']));

To get invoice by id, you can use getInvoice method which is return json object.

sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
        (value) => setState(() => _invoiceKey = value['response']['key']));

To use sadad web view, use can use SadadWebView which is return widget.

 @override
  Widget build(BuildContext context) {
    if (_invoiceKey != '') {
      return SadadWebView(
        invoiceKey: _invoiceKey,
        onSuccess: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const SuccessPage()),
          );
        },
        onFail: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const FailPage()),
          );
        },
        appBar: AppBar(
          title: const Text('App Bar'),
        ),
      );
    } else {
      return const CircularProgressIndicator();
    }
  }
}

Full Example #

import 'package:flutter/material.dart';
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';
void main() {
  runApp(const SadadDemo());
}

class SadadDemo extends StatelessWidget {
  const SadadDemo({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sadad Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Sadad Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // set your clientKey and clientSecret, They must be stored in a safe place such as database.
  final String _clientKey = "xxxxxxxxxxxx";
  final String _clientSecret = "xxxxxxxxxxxx";
  late String _refreshToken;
  late String _accessToken;
  late String _invoiceId;
  late String _invoiceKey = "";
  final invoices = {
    "Invoices": [
      {
        "amount": "10",
        "customer_Name": "customer",
        "customer_Email": "customer@example.com",
        "lang": "en",
        "currency_Code": "KWD",
        "items": [
          {"name": "x", "quantity": 2, "amount": 2},
          {"name": "y", "quantity": 6, "amount": 1}
        ]
      }
    ]
  };
  
  SadadPay sadadPay = SadadPay(env: Environment.dev);

  Future<void> initPaymentProcess() async {
    await sadadPay.generateRefreshToken(clientKey: _clientKey, clientSecret: _clientSecret).then(
        (value) => _refreshToken = value['response']['refreshToken']);
    await sadadPay.generateAccessToken(refreshToken: _refreshToken).then(
        (value) => _accessToken = value['response']['accessToken']);
    await sadadPay.createInvoice(invoices: invoices, token: _accessToken).then(
        (value) => setState(() => _invoiceId = value['response']['invoiceId']));
    await sadadPay.getInvoice(invoiceId: _invoiceId, token: _accessToken).then(
        (value) => setState(() => _invoiceKey = value['response']['key']));
  }

  @override
  initState() {
    super.initState();
    initPaymentProcess();
  }

  @override
  Widget build(BuildContext context) {
    if (_invoiceKey != '') {
      return SadadWebView(
        invoiceKey: _invoiceKey,
        onSuccess: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const SuccessPage()),
          );
        },
        onFail: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => const FailPage()),
          );
        },
        appBar: AppBar(
          title: const Text('App Bar'),
        ),
      );
    } else {
      return const CircularProgressIndicator();
    }
  }
}

class SuccessPage extends StatelessWidget {
  const SuccessPage({super.key});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('App Bar'),
      ),
      body: const Center(
        child: Text('On Success page'),
      ),
    );
  }
}

class FailPage extends StatelessWidget {
  const FailPage({super.key});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('App Bar'),
      ),
      body: const Center(
        child: Text('On Fail page'),
      ),
    );
  }
}
4
likes
150
points
121
downloads

Publisher

unverified uploader

Weekly Downloads

Sadad Flutter SDK for facilitating integration with Sadad Payments REST APIs into your mobile app.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

dio, flutter, webview_flutter

More

Packages that depend on sadadpay_flutter