From f06dde42f6146227c0aeba5dd72302ad108bc78d Mon Sep 17 00:00:00 2001 From: rushabhshroff Date: Fri, 24 Sep 2021 13:16:43 +0530 Subject: [PATCH] Update README.md --- README.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a05caa0..957e4c6 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ dependencies: ``` -### Usage (Example With Dio) +### Basic Usage (Example With Dio) ```dart import 'package:flutter_system_proxy/flutter_system_proxy.dart'; @@ -36,3 +36,41 @@ var proxy = await FlutterSystemProxy.findProxyFromEnvironment(url); }; var response = await dio.get(url); ``` + +### Advanced Usage (Custom Dio Adapter) + +```dart + +// 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 MyAdapter extends HttpClientAdapter { + final DefaultHttpClientAdapter _adapter = DefaultHttpClientAdapter(); + + @override + Future fetch(RequestOptions options, + Stream? requestStream, Future? cancelFuture) async { + var uri = options.uri; + var proxy = + await FlutterSystemProxy.findProxyFromEnvironment(uri.toString()); // This line does the magic + _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); + } +} + +// Use a wrapper around getting dio +void getDio(){ + var dio = Dio(); + dio.httpClientAdapter = MyAdapter(); + return dio; +} + +```