SDKs

Intégration Flutter

Intégrez vos aggrégateurs de paiement dans votre app Flutter en moins de 5 minutes via le proxy ash-gate.

Guide Flutter

Prérequis

  • Flutter SDK ≥ 3.0
  • Un projet ash-gate créé (guide CLI)
  • Votre projectKey (format pk_sandbox_xxx)

1. Installation

flutter pub add feda_flutter

Ou dans pubspec.yaml :

dependencies:
  feda_flutter: ^1.0.0

2. Initialisation

Initialisez le SDK avant runApp(), dans votre main.dart :

import 'package:flutter/material.dart';
import 'package:feda_flutter/feda_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await FedaFlutter.applyCloudConfig(
    projectKey: 'pk_sandbox_xxx',   // Clé publique (Project Key) — sûre à embarquer
    environment: 'sandbox',          // 'sandbox' | 'live'
    proxyUrl: 'https://app.ashgateway.com',
  );

  runApp(const MyApp());
}

!TIP Stockez projectKey et proxyUrl dans des constantes d'environnement (ex: --dart-define) pour ne pas les hardcoder dans le code source.


3. Déclencher un paiement

Avec le Widget intégré (recommandé)

import 'package:feda_flutter/feda_flutter.dart';

class PaymentButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () => _startPayment(context),
      child: const Text('Payer 5 000 FCFA'),
    );
  }

  void _startPayment(BuildContext context) {
    FedaPayWidget.show(
      context: context,
      transaction: FedaTransaction(
        amount: 5000,
        description: 'Abonnement Pack Pro',
        currency: 'XOF',
        customer: FedaCustomer(
          email: '[email protected]',
          firstname: 'Kofi',
          lastname: 'Mensah',
          phoneNumber: FedaPhoneNumber(number: '97000000', country: 'BJ'),
        ),
        callbackUrl: 'https://monapp.com/paiement/retour',
      ),
      onComplete: (TransactionStatus status) {
        switch (status) {
          case TransactionStatus.approved:
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(content: Text('Paiement réussi !')),
            );
            break;
          case TransactionStatus.declined:
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(content: Text('Paiement refusé.')),
            );
            break;
          case TransactionStatus.canceled:
            // L'utilisateur a annulé — pas besoin d'alerter
            break;
        }
      },
    );
  }
}

4. Gestion des erreurs

Wrappez les appels dans un try/catch pour gérer les erreurs réseau :

try {
  await FedaFlutter.applyCloudConfig(
    projectKey: 'pk_sandbox_xxx',
    environment: 'sandbox',
    proxyUrl: 'https://app.ashgateway.com',
  );
} on FedaCloudException catch (e) {
  // Erreur de configuration (clé invalide, proxy injoignable...)
  debugPrint('Erreur ash-gate : ${e.message} (code: ${e.code})');
} catch (e) {
  debugPrint('Erreur inattendue : $e');
}

5. Vérifier un abonnement au démarrage

import 'package:dio/dio.dart';

Future<bool> checkSubscription(String userId) async {
  final dio = Dio();
  final response = await dio.get(
    'https://app.ashgateway.com/public/subscriptions/pk_sandbox_xxx/current',
    queryParameters: {'userId': userId},
  );

  return response.data['hasActiveSubscription'] == true;
}

// Dans votre widget :
@override
void initState() {
  super.initState();
  checkSubscription(currentUser.id).then((hasSubscription) {
    if (!hasSubscription) {
      // Afficher paywall
    }
  });
}

Récapitulatif des méthodes

MéthodeDescription
FedaFlutter.applyCloudConfig(...)Initialisation via le proxy ash-gate
FedaFlutter.applyConfig(...)Initialisation directe (sans proxy)
FedaPayWidget.show(...)Affiche le widget de paiement dans une bottom sheet
FedaFlutter.getConfig()Récupère la configuration active

Suivant : Webhooks ->