如何在flutter项目中使用http拦截器?
How to use http interceptor in a flutter project?
我必须将 header 添加到我所有的 Api。有人告诉我为此使用 http 拦截器。但是我不明白该怎么做,因为我是新手。谁能帮我举个例子?
你可以使用 http_interceptor。
它的工作原理如下,
首先通过实现 InterceptorContract
创建拦截器
class MyInterceptor implements InterceptorContract {
@override
Future<RequestData> interceptRequest({RequestData data}) async {
try {
data.headers["Content-Type"] = "application/json";
} catch (e) {
print(e);
}
return data;
}
@override
Future<ResponseData> interceptResponse({ResponseData data}) async => data;
}
然后创建一个客户端并在其中注入这个拦截器
Client _client = InterceptedClient.build(interceptors: [
MyInterceptor(),
]);
你可以在同一个客户端添加多个拦截器,比如说你想要一个刷新令牌,一个到add/change headers,所以它会是这样的:
Client _client = InterceptedClient.build(interceptors: [
RefreshTokenInterceptor(),
ContentTypeInterceptor(),
/// etc
]);
注意每个拦截器都必须实现 InterceptorContract
现在,无论何时您使用此客户端,请求都会被截取并添加 headers。您可以使此客户端成为单例,以便在整个应用程序中使用相同的实例
class HttpClient {
Client _client;
static void _initClient() {
if (_client == null) {
_client = InterceptedClient.build(
interceptors: [MyInterceptor()],
);
}
}
/// implement http request with this client
}
我必须将 header 添加到我所有的 Api。有人告诉我为此使用 http 拦截器。但是我不明白该怎么做,因为我是新手。谁能帮我举个例子?
你可以使用 http_interceptor。 它的工作原理如下,
首先通过实现 InterceptorContract
class MyInterceptor implements InterceptorContract {
@override
Future<RequestData> interceptRequest({RequestData data}) async {
try {
data.headers["Content-Type"] = "application/json";
} catch (e) {
print(e);
}
return data;
}
@override
Future<ResponseData> interceptResponse({ResponseData data}) async => data;
}
然后创建一个客户端并在其中注入这个拦截器
Client _client = InterceptedClient.build(interceptors: [
MyInterceptor(),
]);
你可以在同一个客户端添加多个拦截器,比如说你想要一个刷新令牌,一个到add/change headers,所以它会是这样的:
Client _client = InterceptedClient.build(interceptors: [
RefreshTokenInterceptor(),
ContentTypeInterceptor(),
/// etc
]);
注意每个拦截器都必须实现 InterceptorContract
现在,无论何时您使用此客户端,请求都会被截取并添加 headers。您可以使此客户端成为单例,以便在整个应用程序中使用相同的实例
class HttpClient {
Client _client;
static void _initClient() {
if (_client == null) {
_client = InterceptedClient.build(
interceptors: [MyInterceptor()],
);
}
}
/// implement http request with this client
}