如何在flutter项目中使用http拦截器?

Had*_*han 4 api http interceptor flutter

我必须向我的所有 Api 添加标头。有人告诉我为此使用 http 拦截器。但我无法理解如何做到这一点,因为我是颤振的新手。谁能帮我举个例子吗?

Mic*_*man 6

您可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个客户端并在其中注入这个拦截器

Client _client = InterceptedClient.build(interceptors: [
      MyInterceptor(),
  ]);
Run Code Online (Sandbox Code Playgroud)

您可以向同一个客户端添加多个拦截器,假设您希望一个拦截器刷新令牌,一个拦截器添加/更改标头,所以它将是这样的:

Client _client = InterceptedClient.build(interceptors: [
      RefreshTokenInterceptor(),
      ContentTypeInterceptor(),
      /// etc
  ]);
Run Code Online (Sandbox Code Playgroud)

请注意,每个拦截器都必须实现InterceptorContract

现在,只要您使用此客户端,请求就会被拦截,并且标头将添加到其中。您可以将此客户端设置为单例,以便在应用程序中使用相同的实例,如下所示

class HttpClient {
Client _client;
static void _initClient() {
    if (_client == null) {
      _client = InterceptedClient.build(
        interceptors: [MyInterceptor()],
      );
    }
  }

  /// implement http request with this client
}

Run Code Online (Sandbox Code Playgroud)