dunopay_flutter

Package Flutter officiel pour accepter les paiements Mobile Money via DunoPay — le même widget de paiement que dunopay.js, entièrement natif Flutter.

pub.dev License: MIT


Fonctionnalités

  • Widget natif — bottom sheet avec les mêmes étapes que dunopay.js
  • 15+ opérateurs Mobile Money (MTN, MOOV, Wave, Orange, Airtel…)
  • Environnements Sandbox et Live
  • Étapes : sélection opérateur → numéro → confirmation → résultat
  • Calcul automatique des frais et affichage du total
  • Polling automatique du statut (5 s × 60 tentatives = 5 min max)
  • Thème personnalisable (couleur primaire, radius)
  • Gestion complète des erreurs et annulations

Installation

dependencies:
  dunopay_flutter: ^1.1.0
flutter pub get

Utilisation rapide

import 'package:dunopay_flutter/dunopay_flutter.dart';

// Créer l'instance (une seule fois, e.g. dans le widget parent)
final dunopay = DunoPay(
  publicKey: 'pk_sandbox_xxxxx',   // votre clé publique DunoPay
  mode     : DunoPayMode.sandbox,  // ou DunoPayMode.live
);

// Ouvrir le widget de paiement
await dunopay.collect(
  context    : context,
  amount     : 5000,         // en centimes ou unités selon la devise
  currency   : 'XOF',
  description: 'Commande #42',

  // Pré-remplir les infos client pour passer l'étape formulaire
  customer: const DunoPayCustomer(
    firstname: 'Jean',
    lastname : 'Dupont',
    phone    : '0196789966',
    email    : 'jean@example.com', // optionnel
  ),

  onSuccess: (result) {
    print('Paiement approuvé : ${result.reference}');
    // result.transactionId, result.amount, result.currency
  },
  onError : (error) => print('Erreur : $error'),
  onCancel: ()      => print('Annulé'),
);

Flux du widget de paiement

┌─────────────────────────────────┐
│  D  Ma Boutique       5 000 XOF │  ← En-tête (marchand + montant)
├─────────────────────────────────┤
│                                 │
│  Étape 0 (si pas de customer)   │  Formulaire : Prénom, Nom, Téléphone
│                                 │
│  Étape 1 — Opérateur            │  Grille 2 colonnes avec drapeaux
│  🇧🇯 MTN Bénin  🇧🇯 MOOV Bénin  │
│  🇨🇮 MTN CI     🇨🇮 Wave CI     │
│  ...                            │
│                                 │
│  Étape 2 — Téléphone            │  Numéro + récap frais si applicable
│  ← MTN Bénin          Changer   │
│  [ 0196789966_________ ]        │
│  Frais: 125 XOF                 │
│  Total: 5 125 XOF               │
│  [ Payer 5 125 XOF ]           │
│                                 │
│  Étape 3 — En attente           │  Spinner + message + bouton Annuler
│       ◌  Confirmez sur          │
│          votre téléphone        │
│                                 │
│  Étape 4 — Résultat             │  ✅ Succès ou ❌ Échec + Réessayer
│       ✓  Paiement réussi !      │
│       5 000 XOF                 │
│       Réf : REF-XXXX            │
└─────────────────────────────────┘

Options

DunoPay

Paramètre Type Défaut Description
publicKey String requis Clé publique (pk_…)
mode DunoPayMode DunoPayMode.sandbox Environnement API
theme DunoPayTheme Thème violet DunoPay Personnalisation visuelle

collect()

Paramètre Type Description
context BuildContext Requis
amount int Requis — montant en unités (ex: 5000)
currency String Requis — ex: 'XOF'
description String Requis — libellé de la transaction
customer DunoPayCustomer? Optionnel — si absent, affiche l'étape form
returnUrl String? URL de retour après paiement
metadata Map<String, dynamic>? Données personnalisées (ex: order_id)
onSuccess void Function(DunoPayResult) Appelé si paiement approuvé
onError void Function(String) Appelé en cas d'erreur
onCancel void Function() Appelé si l'utilisateur ferme le widget

DunoPayTheme

DunoPayTheme(
  primaryColor      : Color(0xFF7B2FBE), // couleur principale
  backgroundColor   : Colors.white,
  cardBorderRadius  : 12.0,
  buttonBorderRadius: 12.0,
)

Plateformes prises en charge

Plateforme Support
✅ Android Cible principale
✅ iOS Cible principale
✅ Web Pris en charge
✅ Windows / macOS / Linux Pris en charge (Dart pur, aucune dépendance native)

Opérateurs supportés

Pays Opérateurs
🇧🇯 Bénin MTN Bénin, MOOV Bénin, Celtiis
🇨🇮 Côte d'Ivoire MTN CI, Wave CI, Orange CI
🇹🇬 Togo MOOV Togo, TOGOCEL T-Money
🇸🇳 Sénégal Free Sénégal, Wave Sénégal
🇳🇪 Niger Airtel Niger
🇲🇱 Mali Orange Mali, BESTCASH Mali
🇬🇳 Guinée MTN Guinée

Obtenir vos clés API

  1. Créez votre compte sur https://dunopay.com
  2. Allez dans API → Clés API
  3. Copiez votre clé publique (pk_sandbox_… ou pk_live_…)

Le mode est déterminé par la clé utilisée, sur une plateforme unique :

  • Les clés de test (pk_sandbox_…) sont disponibles immédiatement — les paiements sont simulés.
  • Les clés live (pk_live_…) ne s'activent qu'une fois votre compte validé : complétez la vérification de votre entreprise (informations légales) depuis le dashboard.

Changelog

Voir CHANGELOG.md.


License

MIT — see LICENSE

Libraries

dunopay_flutter
DunoPay Flutter SDK