onResponse method

  1. @override
void onResponse(
  1. Response response,
  2. ResponseInterceptorHandler handler
)
override

Called when the response is about to be resolved.

Implementation

@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
  try {
    // Decrypt body
    final decryptedBody = _decryptResponseBody(response.data);
    if (decryptedBody != null) {
      response.data = decryptedBody;
    }

    // Getting response token (from decrypted body or header)
    String? responseToken;
    final tokenSource = decryptedBody ?? response.data;

    if (response.realUri.path.contains('/getMpinDetails') &&
        tokenSource is Map &&
        tokenSource['map'] is Map) {
      final res = tokenSource['map'] as Map;
      if (res['token'] != null) {
        responseToken = res['token'].toString();
      } else if (response.headers['token'] != null &&
          response.headers['token']!.isNotEmpty) {
        responseToken = response.headers['token']!.first;
      }
    } else {
      if (tokenSource is Map && tokenSource['token'] != null) {
        responseToken = tokenSource['token'].toString();
      } else if (response.headers['token'] != null &&
          response.headers['token']!.isNotEmpty) {
        responseToken = response.headers['token']!.first;
      }
    }

    // Decrypting response token for comparison
    String? decryptedResponseToken = responseToken != null
        ? decryptString(encryptedText: responseToken)
        : null;

    if (decryptedResponseToken != null &&
        decryptedResponseToken == expectedTokenValue) {
      handler.next(response);
    } else {
      handler.reject(
        DioException(
          requestOptions: response.requestOptions,
          error: 'TokenMismatchException',
          message: 'Token does not match expected value',
          response: response,
        ),
      );
    }
  } catch (e) {
    handler.reject(
      DioException(
        requestOptions: response.requestOptions,
        error: 'TokenCheckException',
        message: 'Error during token check: $e',
        response: response,
      ),
    );
  }
}