request method

Future<E> request({
  1. bool isCached = true,
})

Implementation

Future<E> request({bool isCached = true}) async {
  // 添加 DioCacheInterceptor 拦截器实现接口缓存:
  if (isCached) {
    // OPTIMIZE: 自定义接口缓存
    final cacheInterceptors = DioCacheInterceptor(
      options: CacheOptions(
        store: MemCacheStore(),
      ),
    );
    _dio.interceptors.add(cacheInterceptors);
  }

  if (kPrintable) {
    // 添加 LogInterceptor 拦截器来自动打印请求、响应日志:
    _dio.interceptors.add(
      MDioLogger(
        requestHeader: true,
        requestBody: true,
        maxWidth: consoleOutputLength - 2,
      ),
    );
  }

  // 网络请求
  try {
    Object? data;
    Parameters? queryParameters = parameters;

    if (config.ensureNonNullParametersFields) {
      queryParameters?.removeWhere((key, value) => value == null);
    }

    if (method == HTTPMethod.POST && config.postUseFormData && queryParameters != null) {
      data = FormData.fromMap(queryParameters);
      queryParameters = null;
    }

    final response = await _dio.request(
      url,
      data: data,
      queryParameters: queryParameters,
      options: options,
    );

    final responder = decodeJson(response.data);

    if (responder.isSuccess || !config.isHandleErrors) {
      return responder;
    }

    return Future.error(
      responder.error ??
          APIError(
            code: -1,
            message: '接口请求错误',
          ),
    );
  } on DioException catch (e) {
    logger.e('$e \n $path');

    if (e.response == null) {
      return Future.error(e.error ?? APIError.error());
    }

    if (e.type == DioExceptionType.badResponse && e.response?.statusCode == 503) {
      return Future.error(
        APIError(
          code: e.response?.statusCode,
          message: '服务正在重启, 请稍后再试',
        ),
      );
    }

    final responder = decodeJson(e.response!.data);

    return Future.error(
      responder.error?.copyWith(
            code: e.response?.statusCode,
            message: e.response?.statusMessage,
          ) ??
          APIError(
            code: e.response?.statusCode,
            message: e.response?.statusMessage ?? '接口请求错误',
          ),
    );
  } on Error catch (e) {
    logger.e('$e \n $path');
    return Future.error(e);
  }
}