Dio:如何添加多个拦截器?

问题描述 投票:0回答:1

我需要向我的 Dio 对象添加 多个 拦截器,但我不知道如何做?

我已经添加了一个拦截器以便向请求添加标头。 这是我目前的 Dio 对象 :

Provider(create: (BuildContext context) =>
Dio(BaseOptions(baseUrl: ApiEndPoints.baseURL))
..interceptors.add(InterceptorsWrapper(
  onRequest: (options, handler) {
    final accessToken = accessTokenChangeNotifier.value;
    if (accessToken != null && accessToken.isNotEmpty) {
      options.headers['Authorization'] = accessToken;
    }
    options.headers[HttpHeaders.contentTypeHeader] = "application/json";
    handler.next(options);
  } ,
  onError: (error , handler) async{
    try {
      handler.resolve(error.response!);
    } catch (e) {
      return handler.next(error);
    }
  },
)
)),

现在我想添加另一个名为

curl_logger_dio_interceptor
的记录器拦截器: 根据它的文档我应该像这样添加这个拦截器:

_dio = Dio();
_dio.interceptors.add(CurlLoggerDioInterceptor());

但是我已经在我的 Dio 中添加了一个拦截器,这段代码对我不起作用。 可能我应该使用

_dio.interceptors.addAll
方法,但我不知道如何处理。

flutter interceptor dio
1个回答
0
投票

您可以使用

add
功能添加更多拦截器
..
延续。

Provider(create: (BuildContext context) =>
Dio(BaseOptions(baseUrl: ApiEndPoints.baseURL))
..interceptors.add(InterceptorsWrapper(
  onRequest: (options, handler) {
    final accessToken = accessTokenChangeNotifier.value;
    if (accessToken != null && accessToken.isNotEmpty) {
      options.headers['Authorization'] = accessToken;
    }
    options.headers[HttpHeaders.contentTypeHeader] = "application/json";
    handler.next(options);
  } ,
  onError: (error , handler) async{
    try {
      handler.resolve(error.response!);
    } catch (e) {
      return handler.next(error);
    }
  },
)
)..interceptors.add(CurlLoggerDioInterceptor())),
© www.soinside.com 2019 - 2024. All rights reserved.