Flutter

Guide for Mobile SDK

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

Flutter SDK

Flutter SDK: https://pub.dev/packages/sadadpay_flutter

SDK Overview: https://github.com/Sadadkw/sadad-flutter-sdk

Download SDK: https://github.com/Sadadkw/sadad-flutter-sdk.git

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": "[[email protected]](mailto:[email protected])",  
          "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": "[[email protected]](mailto:[email protected])",  
        "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'),  
      ),  
    );  
  }  
}