首页 > 解决方案 > 如何在flutter项目中使用http拦截器?

问题描述

我必须将标题添加到我所有的 Api 中。有人告诉我为此使用http拦截器。但是我不知道该怎么做,因为我是新手。谁能帮我举个例子?

标签: flutterapihttpinterceptor

解决方案


你可以使用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
}


推荐阅读