Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter flatter-dio-http头不';t从拦截器连接_Flutter_Dart_Interceptor_Dio - Fatal编程技术网

Flutter flatter-dio-http头不';t从拦截器连接

Flutter flatter-dio-http头不';t从拦截器连接,flutter,dart,interceptor,dio,Flutter,Dart,Interceptor,Dio,我有一个附加了拦截器的Dio客户端,但是当我尝试添加一些头时,它们不会出现在日志中。 他的密码是我的 Dio dio(KeyStore keyStore) { final Dio dio = Dio(BaseOptions( contentType: 'application/json', connectTimeout: 5000, sendTimeout: 5000, )); final Dio tokenDio = Dio();

我有一个附加了拦截器的Dio客户端,但是当我尝试添加一些头时,它们不会出现在日志中。 他的密码是我的

 Dio dio(KeyStore keyStore) {
    final Dio dio = Dio(BaseOptions(
      contentType: 'application/json',
      connectTimeout: 5000,
      sendTimeout: 5000,
    ));
    final Dio tokenDio = Dio();
    tokenDio.interceptors.add(LogInterceptor(responseBody: true));

    dio.interceptors.add(LogInterceptor(responseBody: true));
    dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) async {
      final accessToken = await keyStore.readAccessToken();
      final branchId = keyStore.readBranchId();

      dio.lock();
      options.headers[HttpHeaders.authorizationHeader] = 'Bearer: $accessToken';
      options.headers['x-tenant'] = branchId;
      handler.next(options);
      dio.unlock();
    }));
    return dio;
  }
请求头

I/flutter ( 8872): *** Request ***
I/flutter ( 8872): uri: https://api.someapi.com/users/058c026a-2dce-47e7-9fe1-61dec507265f
I/flutter ( 8872): method: GET
I/flutter ( 8872): responseType: ResponseType.json
I/flutter ( 8872): followRedirects: true
I/flutter ( 8872): connectTimeout: 5000
I/flutter ( 8872): sendTimeout: 5000
I/flutter ( 8872): receiveTimeout: 0
I/flutter ( 8872): receiveDataWhenStatusError: true
I/flutter ( 8872): extra: {}
I/flutter ( 8872): headers:
I/flutter ( 8872): 

您不一定需要使用拦截器。 您可以像这样更新默认选项:

dio.options.headers = {
  HttpHeaders.authorizationHeader: 'Bearer: $accessToken',
  'x-tenant': branchId
}

随后的请求将默认使用这些值。

Dio拦截器按顺序运行。由于您的身份验证拦截器是在日志拦截器之后添加的,因此在身份验证拦截器有机会添加头之前,首先调用
LogInterceptor
。侦听器代码在我看来很好,因此我怀疑授权头是否正确地发送到了远程服务器

要使日志反映auth拦截器添加的标题,请确保
LogInterceptor
是列表的最后一个元素
dio.interceptors