onCall method

  1. @override
FutureOr onCall(
  1. T instance,
  2. String methodName,
  3. Map<String, dynamic> parameters,
  4. TypeReflection? returnType,
)
override

Calls made through a ClassProxy will be intercepted by onCall implementation.

Implementation

@override
FutureOr onCall(T instance, String methodName,
    Map<String, dynamic> parameters, TypeReflection? returnType) async {
  var response = api.call(APIRequest.get('$moduleName/$methodName',
      parameters: parameters, credential: credential));

  return response.resolveMapped((response) {
    if (response.isError) {
      var responseError = APIModuleProxyCallerResponseError(
        'Response ERROR> ${response.error}',
        response: response,
        responseStatus: APIResponseStatus.ERROR,
        responseError: response.error,
        responseStackTrace: response.stackTrace,
        module: moduleName,
        methodName: methodName,
        parameters: parameters,
      );

      var errorHandler = this.errorHandler ??
          defaultErrorHandler ??
          APIModuleProxyCallerListener.defaultErrorHandler;

      if (errorHandler != null) {
        try {
          errorHandler(responseError);
        } catch (e, s) {
          _log.severe("Error calling `errorHandler`!", e, s);
        }
      }

      throw responseError;
    }

    if (response.isNotOK) return null;

    var payload = response.payload;

    if (responsesAsJson && returnType != null) {
      var json = responseToJson(payload, apiResponse: response);
      return resolveResponse(returnType, json);
    }

    return payload;
  });
}