pollPayForItStatus function

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

Implementation

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

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

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

      if (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
  };
}