call<T> method
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;
}
}