Flutter 颤振全局Http拦截器

Flutter 颤振全局Http拦截器,flutter,dart,Flutter,Dart,我想知道是否有可能有一个全局HTTP拦截器来为Flatter中的所有请求在头中附加令牌?我已经搜索了很多,找不到任何关于在哪里以及如何在全球范围内设置它的信息。非常感谢 使用u包可以做到: Dio dio = Dio(BaseOptions( connectTimeout: 30000, baseUrl: 'your api', responseType: ResponseType.json, contentType: ContentType.json.toString(), )) ..

我想知道是否有可能有一个全局HTTP拦截器来为Flatter中的所有请求在头中附加令牌?我已经搜索了很多,找不到任何关于在哪里以及如何在全球范围内设置它的信息。非常感谢

使用u包可以做到:

Dio dio = Dio(BaseOptions(
 connectTimeout: 30000,
 baseUrl: 'your api',
 responseType: ResponseType.json,
 contentType: ContentType.json.toString(),
))
..interceptors.addAll(
[
  InterceptorsWrapper(onRequest: (RequestOptions requestOptions) {
    dio.interceptors.requestLock.lock();
    String token = ShareP.sharedPreferences.getString('token');
    if (token != null) {
      dio.options.headers[HttpHeaders.authorizationHeader] =
          'Bearer ' + token;
    }
    dio.interceptors.requestLock.unlock();
    return requestOptions;
  }),
  // other interceptor
 ],
);
颤振提供包装

样品

class LoggingInterceptor implements InterceptorContract {
@override
Future<RequestData> interceptRequest({RequestData data}) async {
 print(data);
 return data;
}

@override
Future<ResponseData> interceptResponse({ResponseData data}) async {
  print(data);
  return data;
}

}
class LoggingInterceptor实现InterceptorContract{
@凌驾
未来拦截请求({RequestData})异步{
打印(数据);
返回数据;
}
@凌驾
未来侦听响应({ResponseData})异步{
打印(数据);
返回数据;
}
}

您可以扩展BaseClient并覆盖
发送(BaseRequest请求)

类CustomClient扩展了BaseClient{
静态映射_getHeaders(){
返回{
“身份验证”:“c7fabcDefG04075ec6ce0”,
};
}
@凌驾
未来发送(BaseRequest请求)异步{
request.headers.addAll(_getHeaders());
返回请求。send();
}
}

在上面的示例中,
“身份验证”:“c7fabcDefG04075ec6ce0”
是硬编码且未加密的,您永远不应该这样做。

谢谢。但是我应该把代码放在哪里呢?是在main.dart文件中,还是在我的项目中的每个HTTP请求文件中?谢谢。请放在您可以访问此dio实例的位置签出。例如,这不是一个全局http拦截器,而只是此客户端实例的http拦截器。因此,您是否希望在每次点击api时创建新的dio实例?只需关注阿里巴巴的FlitterGo项目
class CustomClient extends BaseClient {

  static Map<String, String> _getHeaders() {
    return {
      'Authentication': 'c7fabcDefG04075ec6ce0',
    };
  }

  @override
  Future<StreamedResponse> send(BaseRequest request) async {
    request.headers.addAll(_getHeaders());

    return request.send();
  }

}