# SDK Flutter

Ce SDK est conçu pour permettre l'intégration de KKiaPay dans votre application mobile Flutter. Pour le mettre en place, vous devrez [créer un compte](https://docs.kkiapay.me/v1/compte/creation-dun-compte) sur la plateforme [kkiapay.me](/v1/accueil/kkiapay.md) et suivre le processus :

### Installation

Pour utiliser ce packet :

```dart
dependencies:
  flutter:
    sdk: flutter
  kkiapay_flutter_sdk:
```

Pour le web

```html
ajouter ce script dans le fichier index.html
<script src="https://cdn.kkiapay.me/k.js"></script>
```

### Usage

```dart
import 'package:kkiapay_flutter_sdk/kkiapay_flutter_sdk.dart';
```

**Initialisation de l'instance de Kkiapay**

```dart
final kkiapay = KKiaPay(
    @required callback: Function(Map<String, dynamic> response, BuildContext context),
    @required amount: int, // Ex : 1000
    @required apikey: String, // Ex : XXXX_public_api_key_XXX
    @required sandbox: bool, // Ex : true
    data: String, // Ex : 'Big data'
    phone: String, // Ex : "22961000000"
    name: String, // Ex : "John Doe"
    reason: String, // Ex : "transaction reason"
    email: String, // Ex : "email@mail.com"
    callbackUrl: String, // Ex : "http://kkiapay.me"
    theme: String, // Ex : "#222F5A"
    countries: List<String>, // Ex :  ["CI","BJ"]
    partnerId: String, // Ex : 'AxXxXXxId'
    paymentMethods: List<String> // Ex : ["momo","card"]
);
```

**Création de l'instance de paiement**

Mobile:

```dart
Navigator.push( context, MaterialPageRoute(builder: (context) => kkiapay), );
```

Web:

```dart
KkiapayFlutterSdkPlatform.instance.pay( kkiapay, context, callback );
```

### Exemple

```dart
import 'package:flutter/material.dart';
import 'package:kkiapay_flutter_sdk/kkiapay_flutter_sdk.dart';


void main() => runApp(App());

void callback(response, context) {
  switch ( response['status'] ) {

    case PAYMENT_CANCELLED:
      Navigator.pop(context);
      debugPrint(PAYMENT_CANCELLED);
    break;

    case PAYMENT_INIT:
      debugPrint(PAYMENT_INIT);
      break;

    case PENDING_PAYMENT:
      debugPrint(PENDING_PAYMENT);
      break;
      
    case PAYMENT_SUCCESS:
      Navigator.pop(context);
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => SuccessScreen(
            amount: response['requestData']['amount'],
            transactionId: response['transactionId'],
          ),
        ),
      );
      break;

    default:
      debugPrint(UNKNOWN_EVENT);
      break;
  }
}

final kkiapay = KKiaPay(
    amount: 1000,//
    countries: ["BJ","CI","SN","TG"],//
    phone: "22961000000",//
    name: "John Doe",//
    email: "email@mail.com",//
    reason: 'Transaction reason',//
    data: 'Fake data',//
    sandbox: true,//
    apikey: public_api_key,//
    callback: callback,//
    theme: defaultTheme, // Ex : "#222F5A",
    partnerId: 'AxXxXXxId',//
    paymentMethods: ["momo","card"]//
);

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: nColorPrimary,
          title: Text('Kkiapay Sample'),
          centerTitle: true,
        ),
        body: KkiapaySample(),
      ),
    );
  }
}

class KkiapaySample extends StatelessWidget {
  const KkiapaySample({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ButtonTheme(
              minWidth: 500.0,
              height: 100.0,
              child: TextButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.all(Color(0xff222F5A)),
                  foregroundColor: MaterialStateProperty.all(Colors.white),
                ),
                child: const Text(
                  'Pay Now',
                  style: TextStyle(color: Colors.white),
                ),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => kkiapay),
                  );
                },
              ),
            ),
            const SizedBox(height: 50,),
            ButtonTheme(
              minWidth: 500.0,
              height: 100.0,
              child: TextButton(
                style: ButtonStyle(
                  backgroundColor:
                  MaterialStateProperty.all(const Color(0xff222F5A)),
                  foregroundColor: MaterialStateProperty.all(Colors.white),
                ),
                child: const Text(
                  'Pay Now ( WEB )',
                  style: TextStyle(color: Colors.white),
                ),
                onPressed: () {
                  KkiapayFlutterSdkPlatform.instance.pay(kkiapay, context, callback);
                },
              ),
            )
          ],
        )
    );
  }
}
```

### Références

<table><thead><tr><th width="208">Attribut</th><th width="144">Type</th><th width="105">Requis</th><th>Description</th></tr></thead><tbody><tr><td>phone</td><td>String</td><td>Oui</td><td>Numéro de téléphone du client à débiter. Ex: 22967434270</td></tr><tr><td>amount</td><td>Numeric</td><td>Oui</td><td>Le montant à débiter au client (XOF)</td></tr><tr><td>name</td><td>String</td><td>Non</td><td>Nom et prénoms du client</td></tr><tr><td>partnerId</td><td>String</td><td>Non</td><td>Votre id pour retrouver la transaction</td></tr><tr><td>countries</td><td>Array of String</td><td>Non</td><td>Les pays supportés par le widget. Ex: ["CI"]</td></tr><tr><td>paymentMethods</td><td>Array of String</td><td>Non</td><td>Les méthodes de paiement à autoriser sur le widget. Ex: ["momo","card"]</td></tr><tr><td>theme</td><td>String</td><td>Non</td><td>La couleur que vous souhaitez pour le widget KKiaPay</td></tr><tr><td>apikey</td><td>String</td><td>Oui</td><td>Votre clé d'API publique</td></tr><tr><td>sandbox</td><td>Boolean</td><td>Non</td><td>La valeur <em><strong>true</strong></em> de cet attribut vous permet de passer en mode test</td></tr><tr><td>successCallback</td><td>Function</td><td>Oui</td><td>Cette fonction est appelée une fois que le paiement est succès</td></tr></tbody></table>

```dart
la fonction successCallback prend 2 parametres dans l'ordre suivant :
- Map<String,dynamic> contenant les informations de la transaction
  { 
    'requestData': {
      'amount': int,
      'phone': String,
      'reason': String,
      'data': String,
      'partnerId': String,
      'sandbox': bool,
      'name': String,
      'email': String
    },
    'transactionId': String, 
    'status': String 
  }
  
- le contexte du type BuildContext
```

{% hint style="info" %}
Pour plus d'informations sur le package Flutter, rendez vous sur la page : [KKiaPay Flutter SDK](< https://pub.dev/packages/kkiapay_flutter_sdk>).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kkiapay.me/v1/plugin-et-sdk/sdk-flutter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
