pollPayForItStatus function

Future<Map<String, dynamic>> pollPayForItStatus(
  1. String reference, {
  2. int maxTries = 10,
  3. Duration interval = const Duration(seconds: 5),
})

Poll le statut toutes les 5 secondes, max 10 fois, s'arrête si SUCCESS ou FAILED

Implementation

Future<Map<String, dynamic>> pollPayForItStatus(String reference,
    {int maxTries = 10, Duration interval = const Duration(seconds: 5)}) async {
  int tries = 0;

  while (tries < maxTries) {
    final statusData = await checkPayForItStatus(reference);

    if (statusData != null) {
      final status = statusData['status']?.toString().toUpperCase();

      if (status == 'SUCCESS' || status == 'SUCCESSFUL') {
        return {
          ...statusData,
          'finalStatus': 'SUCCESS',
        };
      } else if (status == 'FAILED') {
        return {
          ...statusData,
          'finalStatus': 'FAILED',
        };
      }
    }

    await Future.delayed(interval);
    tries++;
  }

  return {
    'status': 'TIMEOUT',
    'message':
        'Le statut de la transaction n\'a pas pu être déterminé dans le délai imparti.',
    'reference': reference
  };
}