Dio如何添加多个拦截器?已加Header拦截器需新增日志拦截器
Dio 添加多个拦截器的正确实现方法
你有两种简单的方式给已有的Dio对象添加第二个拦截器:
方式一:链式调用 add 方法
利用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); } }, )) ..interceptors.add(CurlLoggerDioInterceptor()), // 直接链式添加日志拦截器 )
方式二:使用 addAll 批量添加
如果后续需要添加更多拦截器,用addAll把所有拦截器放在列表中一次性添加,代码结构更清晰:
Provider(create: (BuildContext context) { // 先初始化Dio对象 final dio = Dio(BaseOptions(baseUrl: ApiEndPoints.baseURL)); // 批量添加所有拦截器 dio.interceptors.addAll([ // 原有的请求头拦截器 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); } }, ), // 新增的日志拦截器 CurlLoggerDioInterceptor(), ]); return dio; }),
两种方式都能实现需求,可根据拦截器的数量选择合适的写法。
内容的提问来源于stack exchange,提问作者Ghazal
相关产品推荐
相关产品推荐

