call<T> method

Future<T> call<T>(
  1. String method,
  2. List params
)

Sends an RPC request.

Implementation

Future<T> call<T>(String method, List<dynamic> params) async {
  // Run beforeRequest middlewares
  for (final middleware in middlewares) {
    final cached = await middleware.beforeRequest(method, params);
    if (cached != null) {
      return cached['result'] as T;
    }
  }

  try {
    var response = await transport.request(method, params);

    // Run afterResponse middlewares
    for (final middleware in middlewares) {
      response = await middleware.afterResponse(response);
    }

    // Cache response if applicable
    for (final middleware in middlewares) {
      if (middleware is CacheMiddleware) {
        middleware.cacheResponse(method, params, response);
      }
    }

    return response['result'] as T;
  } catch (e) {
    // Run onError middlewares
    for (final middleware in middlewares) {
      await middleware.onError(e as Exception);
    }
    rethrow;
  }
}