Flutter 在flatter中全局覆盖http包

Flutter 在flatter中全局覆盖http包,flutter,http,dart,Flutter,Http,Dart,我正在尝试全局覆盖http包,以便截获在后台使用http包的请求。在调用构造函数时,所有重写的方法都不会被调用。我为GET和POST请求添加了打印语句。这是我的覆盖代码: void main() { HttpOverrides.global = MyHttpOverrides(); runApp(...); } 我还尝试在没有http包的情况下发出POST请求,在这种情况下,将按预期调用重写的方法 String _host = InternetAddress.loopbackI

我正在尝试全局覆盖http包,以便截获在后台使用http包的请求。在调用构造函数时,所有重写的方法都不会被调用。我为GET和POST请求添加了打印语句。这是我的覆盖代码:

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(...);
}
我还尝试在没有http包的情况下发出POST请求,在这种情况下,将按预期调用重写的方法

    String _host = InternetAddress.loopbackIPv4.host;
    String path = 'file.txt';

    Map jsonData = {
      'name': 'Han Solo',
      'job': 'reluctant hero',
      'BFF': 'Chewbacca',
      'ship': 'Millennium Falcon',
      'weakness': 'smuggling debts'
    };

    HttpClientRequest request = await HttpClient().post(_host, 4049, path) /*1*/
      ..headers.contentType = ContentType.json /*2*/
      ..write(jsonEncode(jsonData)); /*3*/
    HttpClientResponse response = await request.close(); /*4*/
    await utf8.decoder.bind(response /*5*/).forEach(print);
http包有什么特别的地方需要我做吗

class MyHttpClient implements HttpClient {
  HttpClient _realClient;

  MyHttpClient(this._realClient) {
    print("initialized");
  }

  @override
  bool get autoUncompress => _realClient.autoUncompress;

  @override
  set autoUncompress(bool value) => _realClient.autoUncompress = value;

  @override
  Duration get connectionTimeout => _realClient.connectionTimeout;

  @override
  set connectionTimeout(Duration value) =>
      _realClient.connectionTimeout = value;

  @override
  Duration get idleTimeout => _realClient.idleTimeout;

  @override
  set idleTimeout(Duration value) => _realClient.idleTimeout = value;

  @override
  int get maxConnectionsPerHost => _realClient.maxConnectionsPerHost;

  @override
  set maxConnectionsPerHost(int value) =>
      _realClient.maxConnectionsPerHost = value;

  @override
  String get userAgent => _realClient.userAgent;

  @override
  set userAgent(String value) => _realClient.userAgent = value;

  @override
  void addCredentials(
          Uri url, String realm, HttpClientCredentials credentials) =>
      _realClient.addCredentials(url, realm, credentials);

  @override
  void addProxyCredentials(String host, int port, String realm,
          HttpClientCredentials credentials) =>
      _realClient.addProxyCredentials(host, port, realm, credentials);

  @override
  void set authenticate(
          Future<bool> Function(Uri url, String scheme, String realm) f) =>
      _realClient.authenticate = f;

  @override
  void set authenticateProxy(
          Future<bool> Function(
                  String host, int port, String scheme, String realm)
              f) =>
      _realClient.authenticateProxy = f;

  @override
  void set badCertificateCallback(
          bool Function(X509Certificate cert, String host, int port)
              callback) =>
      _realClient.badCertificateCallback = callback;

  @override
  void close({bool force = false}) => _realClient.close(force: force);

  @override
  Future<HttpClientRequest> delete(String host, int port, String path) =>
      _realClient.delete(host, port, path);

  @override
  Future<HttpClientRequest> deleteUrl(Uri url) => _realClient.deleteUrl(url);

  @override
  void set findProxy(String Function(Uri url) f) => _realClient.findProxy = f;

  @override
  Future<HttpClientRequest> get(String host, int port, String path) {
    print("get called");
    return _updateHeaders(_realClient.get(host, port, path));
  }

  Future<HttpClientRequest> _updateHeaders(
      Future<HttpClientRequest> httpClientRequest) async {
    return (await httpClientRequest)..headers.add('foo', 'bar');
  }

  @override
  Future<HttpClientRequest> getUrl(Uri url) =>
      _updateHeaders(_realClient.getUrl(url.replace(path: url.path)));

  @override
  Future<HttpClientRequest> head(String host, int port, String path) =>
      _realClient.head(host, port, path);

  @override
  Future<HttpClientRequest> headUrl(Uri url) => _realClient.headUrl(url);

  @override
  Future<HttpClientRequest> open(
          String method, String host, int port, String path) =>
      _realClient.open(method, host, port, path);

  @override
  Future<HttpClientRequest> openUrl(String method, Uri url) =>
      _realClient.openUrl(method, url);

  @override
  Future<HttpClientRequest> patch(String host, int port, String path) =>
      _realClient.patch(host, port, path);

  @override
  Future<HttpClientRequest> patchUrl(Uri url) => _realClient.patchUrl(url);

  @override
  Future<HttpClientRequest> post(String host, int port, String path) {
    print("post called");
    return _realClient.post(host, port, path);
  }

  @override
  Future<HttpClientRequest> postUrl(Uri url) {
    print("postUrl called");
    return _realClient.postUrl(url);
  }

  @override
  Future<HttpClientRequest> put(String host, int port, String path) =>
      _realClient.put(host, port, path);

  @override
  Future<HttpClientRequest> putUrl(Uri url) => _realClient.putUrl(url);
}
http.post(
      requestData.uri,
      headers: requestData.headers,
      body: requestData.body,
    );
    String _host = InternetAddress.loopbackIPv4.host;
    String path = 'file.txt';

    Map jsonData = {
      'name': 'Han Solo',
      'job': 'reluctant hero',
      'BFF': 'Chewbacca',
      'ship': 'Millennium Falcon',
      'weakness': 'smuggling debts'
    };

    HttpClientRequest request = await HttpClient().post(_host, 4049, path) /*1*/
      ..headers.contentType = ContentType.json /*2*/
      ..write(jsonEncode(jsonData)); /*3*/
    HttpClientResponse response = await request.close(); /*4*/
    await utf8.decoder.bind(response /*5*/).forEach(print);