Flutter全局Http拦截器

时间:2020-03-18 18:52:48

标签: flutter dart

我想知道是否可以在Flutter中使用全局HTTP拦截器在标头中附加令牌吗?我进行了很多搜索,找不到任何信息以及在何处以及如何将其设置为全局信息。非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以扩展 BaseClient 并覆盖 send(BaseRequest request)

class CustomClient extends BaseClient {

  static Map<String, String> _getHeaders() {
    return {
      'Authentication': 'c7fabcDefG04075ec6ce0',
    };
  }

  @override
  Future<StreamedResponse> send(BaseRequest request) async {
    request.headers.addAll(_getHeaders());

    return request.send();
  }

}

在上面的例子中,'Authentication': 'c7fabcDefG04075ec6ce0' 是硬编码的,没有加密,你不应该这样做。

答案 1 :(得分:0)

使用dio软件包,您可以做到这一点:

Dio dio = Dio(BaseOptions(
 connectTimeout: 30000,
 baseUrl: 'your api',
 responseType: ResponseType.json,
 contentType: ContentType.json.toString(),
))
..interceptors.addAll(
[
  InterceptorsWrapper(onRequest: (RequestOptions requestOptions) {
    dio.interceptors.requestLock.lock();
    String token = ShareP.sharedPreferences.getString('token');
    if (token != null) {
      dio.options.headers[HttpHeaders.authorizationHeader] =
          'Bearer ' + token;
    }
    dio.interceptors.requestLock.unlock();
    return requestOptions;
  }),
  // other interceptor
 ],
);

答案 2 :(得分:0)

Flutter 提供 http_interceptor.dart 包。

样品

class LoggingInterceptor implements InterceptorContract {
@override
Future<RequestData> interceptRequest({RequestData data}) async {
 print(data);
 return data;
}

@override
Future<ResponseData> interceptResponse({ResponseData data}) async {
  print(data);
  return data;
}

}