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(formatpk_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
projectKeyetproxyUrldans 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éthode | Description |
|---|---|
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 |