如何在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
}