flutter - 如何在flutter项目中使用http拦截器?
问题描述
我必须将标题添加到我所有的 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(),
]);
您可以将多个拦截器添加到同一个客户端,假设您想要一个来刷新令牌,一个来添加/更改标头,所以它将是这样的:
Client _client = InterceptedClient.build(interceptors: [
RefreshTokenInterceptor(),
ContentTypeInterceptor(),
/// etc
]);
请注意,每个拦截器都必须实现InterceptorContract
现在,无论您何时使用此客户端,请求都会被拦截并添加标头。您可以将此客户端设置为单例,以便在整个应用程序中使用相同的实例,如下所示
class HttpClient {
Client _client;
static void _initClient() {
if (_client == null) {
_client = InterceptedClient.build(
interceptors: [MyInterceptor()],
);
}
}
/// implement http request with this client
}
推荐阅读
- spring-boot - RabbitMQ 作为 Kubernetes 中用于 Spring Boot 应用程序的 Spring Cloud Bus
- php - JSON 格式的 YouTube 视频列表
- swift - 如何使用 IGListKit 在选择时为 UICollectionViewCell 设置动画
- fosuserbundle - 在 FOSUserBundle 中查看其他用户的个人资料
- forms - Yii2:为提交表单按钮创建条件
- javascript - 获取唯一的数据属性值并从中创建键值数组?
- javascript - 如何在 MongoDB 中保存嵌套文档对象
- webpack - Aurelia Webpack 包无法与 PhoneGap 一起使用
- django - Django休息插入顺序
- c# - 需要将数据从 CAPL 写入 C# 代码并读回 CAPL 脚本