Dio拦截器不能与依赖注入一起工作



我试图使用Retrofit作为我的远程API客户端。我用Injectable在我的项目中实现依赖注入,然后像这样注册Dio类。

@singleton
class TSApiDio extends DioForNative {
TSApiDio() {
_configureOptions();
_configureInterceptors();
}
void _configureOptions() {
options.baseUrl = TSNetworkConstants.baseNewsAPIUrl;
options.connectTimeout = TSNetworkConstants.connectionTimeout;
options.receiveTimeout = TSNetworkConstants.receiveTimeout;
options.responseType = ResponseType.json;
}
void _configureInterceptors() {
interceptors.add(LogInterceptor());
}
}

注意,我在TSApiDio的构造函数中注册了LogInterceptor。这是LogInterceptor。

class LogInterceptors extends Interceptor {
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
log('=====================================================');
log("[RESPONSE]: ${jsonEncode(response.data)}", name: "SUCCESS RESPONSE");
log('=====================================================');
return handler.next(response);
}
@override
void onError(DioError err, ErrorInterceptorHandler handler) {
log('=====================================================');
log("[ERROR]: ${err.message}", name: "NETWORK ERROR", error: err.error);
log('=====================================================');
switch (err.type) {
case DioErrorType.connectTimeout:
case DioErrorType.sendTimeout:
case DioErrorType.receiveTimeout:
throw TSException("ERROR FROM INTERCEPTOR");
case DioErrorType.response:
throw TSExceptionWithResponse(1, "TEST ERROR MESSAGE", []);
case DioErrorType.cancel:
break;
case DioErrorType.other:
throw TSException("ERROR FROM INTERCEPTOR");
}
super.onError(err, handler);
}
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
dynamic body;
body = options.queryParameters;
if (options.data != null) {
body = options.data;
}
if (body is Map) {
body = json.encode(body);
}
log('=====================================================');
log("[REQUEST]: ${jsonEncode(body)}", name: "SUCCESS RESPONSE");
log('=====================================================');
return handler.next(options);
}
}

然后我尝试点击newsapi.org,但是LogInterceptor没有被执行。我还为调试器设置了一个断点,在每个覆盖的函数(onError, onRequest, onResponse)上,它们都不执行。

我也尝试了别人已经做过的事情,但不幸的是没有什么不同。我想知道我在注册拦截器时遗漏了什么步骤。有人能解释一下吗?或者谁能给出另一个用依赖注入注册拦截器的例子?

这个问题没有警告或错误日志。

提前感谢。

我找到答案了。这个问题可能听起来很傻。

我错误注册了拦截器。我做的那个叫做LogInterceptors,实际上在Dio中有一个内置的类叫做LogInterceptor

我注册了LogInterceptor类,而不是我做的LogInterceptors类。

最新更新