Skip to content

Files

Latest commit

Aug 14, 2024
85959aa · Aug 14, 2024

History

History
76 lines (58 loc) · 1.74 KB

README.md

File metadata and controls

76 lines (58 loc) · 1.74 KB

Flutter System Proxy

A Flutter Plugin to detect Proxy from the system, when using geolocation, tunnel, etc.

Getting Started

Installation

dependencies:
  ...
  flutter_system_proxy:
    git: 
      url: https://github.com/LambdaTest/flutter_system_proxy.git
      ref: main

Basic Usage (Example With Dio)

import 'package:flutter_system_proxy/flutter_system_proxy.dart';


...


var dio = new Dio();
var url = "http://....";
var proxy = await FlutterSystemProxy.findProxyFromEnvironment(url);
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
   (HttpClient client) {
      client.findProxy = (uri) {
        return proxy;
   };
};
var response = await dio.get(url);

Advanced Usage (Custom Dio Adapter)

// Create a custom adapter that can help resolve proxy based on urls 
// (This is important as in some senerio there are PAC files which might have different proxy based on different urls)
class ProxyAdapter extends HttpClientAdapter {
  final DefaultHttpClientAdapter _adapter = DefaultHttpClientAdapter();

  @override
  Future<ResponseBody> fetch(RequestOptions options,
      Stream<Uint8List>? requestStream, Future? cancelFuture) async {
    var uri = options.uri;
    var proxy =
        await FlutterSystemProxy.findProxyFromEnvironment(uri.toString()); // Detects proxy from the system
    _adapter.onHttpClientCreate = (HttpClient clinet) {
      clinet.findProxy = (uri) {
        return proxy;
      };
    };
    return _adapter.fetch(options, requestStream, cancelFuture);
  }

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

// wrapper around dio
void getDio(){
  var dio = Dio();
  dio.httpClientAdapter = MyAdapter();
  return dio;
}