From 3fd8f7462be8039e545e1dbe9e0e1dfd0917ee94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Sat, 13 Jul 2019 19:48:23 -0300 Subject: [PATCH 1/7] add support for android headers --- .../urllauncher/UrlLauncherPlugin.java | 78 +++++++++++++++---- packages/url_launcher/example/lib/main.dart | 10 ++- packages/url_launcher/lib/url_launcher.dart | 2 + .../url_launcher/test/url_launcher_test.dart | 26 +++++++ 4 files changed, 96 insertions(+), 20 deletions(-) diff --git a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java index 30d067664b85..b8a3a3186d28 100644 --- a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java +++ b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java @@ -11,11 +11,17 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.provider.Browser; import android.view.KeyEvent; import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; + +import java.util.HashMap; +import java.util.Map; + import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -60,16 +66,18 @@ private void canLaunch(String url, Result result) { boolean canLaunch = componentName != null && !"{com.android.fallback/com.android.fallback.Fallback}" - .equals(componentName.toShortString()); + .equals(componentName.toShortString()); result.success(canLaunch); } private void launch(MethodCall call, Result result, String url) { Intent launchIntent; - boolean useWebView = call.argument("useWebView"); - boolean enableJavaScript = call.argument("enableJavaScript"); - boolean enableDomStorage = call.argument("enableDomStorage"); - Activity activity = mRegistrar.activity(); + final boolean useWebView = call.argument("useWebView"); + final boolean enableJavaScript = call.argument("enableJavaScript"); + final boolean enableDomStorage = call.argument("enableDomStorage"); + final Map headersMap = call.argument("headers"); + final Activity activity = mRegistrar.activity(); + if (activity == null) { result.error("NO_ACTIVITY", "Launching a URL requires a foreground activity.", null); return; @@ -83,6 +91,10 @@ private void launch(MethodCall call, Result result, String url) { launchIntent = new Intent(Intent.ACTION_VIEW); launchIntent.setData(Uri.parse(url)); } + + final Bundle headersBundle = extractBundle(headersMap); + launchIntent.putExtra(Browser.EXTRA_HEADERS, headersBundle); + activity.startActivity(launchIntent); result.success(true); } @@ -93,6 +105,15 @@ private void closeWebView(Result result) { result.success(null); } + private Bundle extractBundle(Map headersMap) { + final Bundle headersBundle = new Bundle(); + for (String key : headersMap.keySet()) { + final String value = headersMap.get(key); + headersBundle.putString(key, value); + } + return headersBundle; + } + /* Launches WebView activity */ public static class WebViewActivity extends Activity { private WebView webview; @@ -104,23 +125,37 @@ public void onCreate(Bundle savedInstanceState) { webview = new WebView(this); setContentView(webview); // Get the Intent that started this activity and extract the string - Intent intent = getIntent(); - String url = intent.getStringExtra("url"); - Boolean enableJavaScript = intent.getBooleanExtra("enableJavaScript", false); - Boolean enableDomStorage = intent.getBooleanExtra("enableDomStorage", false); - webview.loadUrl(url); - if (enableJavaScript) { - webview.getSettings().setJavaScriptEnabled(enableJavaScript); - } - if (enableDomStorage) { - webview.getSettings().setDomStorageEnabled(enableDomStorage); - } + final Intent intent = getIntent(); + final String url = intent.getStringExtra("url"); + final boolean enableJavaScript = intent.getBooleanExtra("enableJavaScript", false); + final boolean enableDomStorage = intent.getBooleanExtra("enableDomStorage", false); + final Bundle headersBundle = intent.getBundleExtra(Browser.EXTRA_HEADERS); + + final Map headersMap = extractHeaders(headersBundle); + webview.loadUrl(url, headersMap); + + webview.getSettings().setJavaScriptEnabled(enableJavaScript); + webview.getSettings().setDomStorageEnabled(enableDomStorage); + // Open new urls inside the webview itself. webview.setWebViewClient( new WebViewClient() { + + @Override + @SuppressWarnings("deprecation") + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(url); + return false; + } + return super.shouldOverrideUrlLoading(view, url); + } + @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - view.loadUrl(request.getUrl().toString()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(request.getUrl().toString()); + } return false; } }); @@ -139,6 +174,15 @@ public void onReceive(Context arg0, Intent intent) { registerReceiver(broadcastReceiver, new IntentFilter("close")); } + private Map extractHeaders(Bundle headersBundle) { + final Map headersMap = new HashMap<>(); + for (String key : headersBundle.keySet()) { + final String value = headersBundle.getString(key); + headersMap.put(key, value); + } + return headersMap; + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/packages/url_launcher/example/lib/main.dart b/packages/url_launcher/example/lib/main.dart index 66b5e9f538e9..454ba43f6908 100644 --- a/packages/url_launcher/example/lib/main.dart +++ b/packages/url_launcher/example/lib/main.dart @@ -38,7 +38,9 @@ class _MyHomePageState extends State { Future _launchInBrowser(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: false, forceWebView: false); + await launch(url, forceSafariVC: false, forceWebView: false, headers: { + 'my_header_key': 'my_header_value' + }); } else { throw 'Could not launch $url'; } @@ -46,7 +48,9 @@ class _MyHomePageState extends State { Future _launchInWebViewOrVC(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: true, forceWebView: true); + await launch(url, forceSafariVC: true, forceWebView: true, headers: { + 'my_header_key': 'my_header_value' + }); } else { throw 'Could not launch $url'; } @@ -112,7 +116,7 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { - const String toLaunch = 'https://flutter.io'; + const String toLaunch = 'https://www.cylog.org/headers/'; return Scaffold( appBar: AppBar( title: Text(widget.title), diff --git a/packages/url_launcher/lib/url_launcher.dart b/packages/url_launcher/lib/url_launcher.dart index edae489b8dc0..757179e9a375 100644 --- a/packages/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/lib/url_launcher.dart @@ -61,6 +61,7 @@ Future launch( bool enableJavaScript, bool enableDomStorage, bool universalLinksOnly, + Map headers, Brightness statusBarBrightness, }) async { assert(urlString != null); @@ -91,6 +92,7 @@ Future launch( 'enableJavaScript': enableJavaScript ?? false, 'enableDomStorage': enableDomStorage ?? false, 'universalLinksOnly': universalLinksOnly ?? false, + 'headers': headers ?? {}, }, ); if (statusBarBrightness != null) { diff --git a/packages/url_launcher/test/url_launcher_test.dart b/packages/url_launcher/test/url_launcher_test.dart index db746902f3d3..9e45853ce988 100644 --- a/packages/url_launcher/test/url_launcher_test.dart +++ b/packages/url_launcher/test/url_launcher_test.dart @@ -42,6 +42,26 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': false, + 'headers': {}, + }) + ], + ); + }); + + test('launch with headers', () async { + await launch('http://example.com/', + headers: { 'key': 'value' },); + expect( + log, + [ + isMethodCall('launch', arguments: { + 'url': 'http://example.com/', + 'useSafariVC': true, + 'useWebView': false, + 'enableJavaScript': false, + 'enableDomStorage': false, + 'universalLinksOnly': false, + 'headers': { 'key': 'value' }, }) ], ); @@ -59,6 +79,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': false, + 'headers': {}, }) ], ); @@ -77,6 +98,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': true, + 'headers': {}, }) ], ); @@ -94,6 +116,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': false, + 'headers': {}, }) ], ); @@ -112,6 +135,7 @@ void main() { 'enableJavaScript': true, 'enableDomStorage': false, 'universalLinksOnly': false, + 'headers': {}, }) ], ); @@ -130,6 +154,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': true, 'universalLinksOnly': false, + 'headers': {}, }) ], ); @@ -147,6 +172,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': false, + 'headers': {}, }) ], ); From e8ebb11d5eddc7ca61dd58574310d66508d2edcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Sat, 13 Jul 2019 20:17:42 -0300 Subject: [PATCH 2/7] fix flutter analyze wranings and update docs --- packages/url_launcher/CHANGELOG.md | 4 ++++ packages/url_launcher/example/lib/main.dart | 4 ++-- packages/url_launcher/pubspec.yaml | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/url_launcher/CHANGELOG.md b/packages/url_launcher/CHANGELOG.md index 20b64b11cd5f..7499dae667b2 100644 --- a/packages/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.6 + +* Add `headers` field to enable headers in the Android implementation. + ## 5.0.5 * Add `enableDomStorage` field to `launch` to enable DOM storage in Android WebView. diff --git a/packages/url_launcher/example/lib/main.dart b/packages/url_launcher/example/lib/main.dart index 454ba43f6908..3ac4fcca2d94 100644 --- a/packages/url_launcher/example/lib/main.dart +++ b/packages/url_launcher/example/lib/main.dart @@ -38,7 +38,7 @@ class _MyHomePageState extends State { Future _launchInBrowser(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: false, forceWebView: false, headers: { + await launch(url, forceSafariVC: false, forceWebView: false, headers: { 'my_header_key': 'my_header_value' }); } else { @@ -48,7 +48,7 @@ class _MyHomePageState extends State { Future _launchInWebViewOrVC(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: true, forceWebView: true, headers: { + await launch(url, forceSafariVC: true, forceWebView: true, headers: { 'my_header_key': 'my_header_value' }); } else { diff --git a/packages/url_launcher/pubspec.yaml b/packages/url_launcher/pubspec.yaml index 0c0711222338..2d89cacd333d 100644 --- a/packages/url_launcher/pubspec.yaml +++ b/packages/url_launcher/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher -version: 5.0.5 +version: 5.0.6 flutter: plugin: From 9a164339934d794e32ecba0de31bb446f748f8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Sat, 13 Jul 2019 21:47:50 -0300 Subject: [PATCH 3/7] fix formatter --- .../urllauncher/UrlLauncherPlugin.java | 60 +++++++++---------- packages/url_launcher/example/lib/main.dart | 18 ++++-- .../url_launcher/test/url_launcher_test.dart | 8 ++- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java index b8a3a3186d28..b3a7615bb243 100644 --- a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java +++ b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java @@ -18,10 +18,8 @@ import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; - import java.util.HashMap; import java.util.Map; - import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -66,7 +64,7 @@ private void canLaunch(String url, Result result) { boolean canLaunch = componentName != null && !"{com.android.fallback/com.android.fallback.Fallback}" - .equals(componentName.toShortString()); + .equals(componentName.toShortString()); result.success(canLaunch); } @@ -127,8 +125,10 @@ public void onCreate(Bundle savedInstanceState) { // Get the Intent that started this activity and extract the string final Intent intent = getIntent(); final String url = intent.getStringExtra("url"); - final boolean enableJavaScript = intent.getBooleanExtra("enableJavaScript", false); - final boolean enableDomStorage = intent.getBooleanExtra("enableDomStorage", false); + final boolean enableJavaScript = + intent.getBooleanExtra("enableJavaScript", false); + final boolean enableDomStorage = + intent.getBooleanExtra("enableDomStorage", false); final Bundle headersBundle = intent.getBundleExtra(Browser.EXTRA_HEADERS); final Map headersMap = extractHeaders(headersBundle); @@ -139,38 +139,38 @@ public void onCreate(Bundle savedInstanceState) { // Open new urls inside the webview itself. webview.setWebViewClient( - new WebViewClient() { - - @Override - @SuppressWarnings("deprecation") - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - view.loadUrl(url); - return false; - } - return super.shouldOverrideUrlLoading(view, url); - } + new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - view.loadUrl(request.getUrl().toString()); - } + @Override + @SuppressWarnings("deprecation") + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(url); return false; } - }); + return super.shouldOverrideUrlLoading(view, url); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(request.getUrl().toString()); + } + return false; + } + }); // Set broadcast receiver to handle calls to close the web view broadcastReceiver = - new BroadcastReceiver() { - @Override - public void onReceive(Context arg0, Intent intent) { - String action = intent.getAction(); - if ("close".equals(action)) { - finish(); - } + new BroadcastReceiver() { + @Override + public void onReceive(Context arg0, Intent intent) { + String action = intent.getAction(); + if ("close".equals(action)) { + finish(); } - }; + } + }; registerReceiver(broadcastReceiver, new IntentFilter("close")); } diff --git a/packages/url_launcher/example/lib/main.dart b/packages/url_launcher/example/lib/main.dart index 3ac4fcca2d94..b4a7e4275bfc 100644 --- a/packages/url_launcher/example/lib/main.dart +++ b/packages/url_launcher/example/lib/main.dart @@ -38,9 +38,12 @@ class _MyHomePageState extends State { Future _launchInBrowser(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: false, forceWebView: false, headers: { - 'my_header_key': 'my_header_value' - }); + await launch( + url, + forceSafariVC: false, + forceWebView: false, + headers: {'my_header_key': 'my_header_value'}, + ); } else { throw 'Could not launch $url'; } @@ -48,9 +51,12 @@ class _MyHomePageState extends State { Future _launchInWebViewOrVC(String url) async { if (await canLaunch(url)) { - await launch(url, forceSafariVC: true, forceWebView: true, headers: { - 'my_header_key': 'my_header_value' - }); + await launch( + url, + forceSafariVC: true, + forceWebView: true, + headers: {'my_header_key': 'my_header_value'}, + ); } else { throw 'Could not launch $url'; } diff --git a/packages/url_launcher/test/url_launcher_test.dart b/packages/url_launcher/test/url_launcher_test.dart index 9e45853ce988..93f4acf71601 100644 --- a/packages/url_launcher/test/url_launcher_test.dart +++ b/packages/url_launcher/test/url_launcher_test.dart @@ -49,8 +49,10 @@ void main() { }); test('launch with headers', () async { - await launch('http://example.com/', - headers: { 'key': 'value' },); + await launch( + 'http://example.com/', + headers: {'key': 'value'}, + ); expect( log, [ @@ -61,7 +63,7 @@ void main() { 'enableJavaScript': false, 'enableDomStorage': false, 'universalLinksOnly': false, - 'headers': { 'key': 'value' }, + 'headers': {'key': 'value'}, }) ], ); From 4ae6a1dd6ccfe857a9f1e26a31411209bbd06145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Sun, 14 Jul 2019 14:50:57 -0300 Subject: [PATCH 4/7] fix formatting --- .../urllauncher/UrlLauncherPlugin.java | 60 +++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java index b3a7615bb243..b877a45bdb25 100644 --- a/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java +++ b/packages/url_launcher/android/src/main/java/io/flutter/plugins/urllauncher/UrlLauncherPlugin.java @@ -18,13 +18,13 @@ import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; -import java.util.HashMap; -import java.util.Map; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; +import java.util.HashMap; +import java.util.Map; /** UrlLauncherPlugin */ public class UrlLauncherPlugin implements MethodCallHandler { @@ -125,10 +125,8 @@ public void onCreate(Bundle savedInstanceState) { // Get the Intent that started this activity and extract the string final Intent intent = getIntent(); final String url = intent.getStringExtra("url"); - final boolean enableJavaScript = - intent.getBooleanExtra("enableJavaScript", false); - final boolean enableDomStorage = - intent.getBooleanExtra("enableDomStorage", false); + final boolean enableJavaScript = intent.getBooleanExtra("enableJavaScript", false); + final boolean enableDomStorage = intent.getBooleanExtra("enableDomStorage", false); final Bundle headersBundle = intent.getBundleExtra(Browser.EXTRA_HEADERS); final Map headersMap = extractHeaders(headersBundle); @@ -139,38 +137,38 @@ public void onCreate(Bundle savedInstanceState) { // Open new urls inside the webview itself. webview.setWebViewClient( - new WebViewClient() { - - @Override - @SuppressWarnings("deprecation") - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - view.loadUrl(url); - return false; + new WebViewClient() { + + @Override + @SuppressWarnings("deprecation") + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(url); + return false; + } + return super.shouldOverrideUrlLoading(view, url); } - return super.shouldOverrideUrlLoading(view, url); - } - @Override - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - view.loadUrl(request.getUrl().toString()); + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + view.loadUrl(request.getUrl().toString()); + } + return false; } - return false; - } - }); + }); // Set broadcast receiver to handle calls to close the web view broadcastReceiver = - new BroadcastReceiver() { - @Override - public void onReceive(Context arg0, Intent intent) { - String action = intent.getAction(); - if ("close".equals(action)) { - finish(); + new BroadcastReceiver() { + @Override + public void onReceive(Context arg0, Intent intent) { + String action = intent.getAction(); + if ("close".equals(action)) { + finish(); + } } - } - }; + }; registerReceiver(broadcastReceiver, new IntentFilter("close")); } From 1ad272120052f93cde91885938a8b21f7cf2ecc5 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 15 Jul 2019 17:23:54 -0700 Subject: [PATCH 5/7] Update CHANGELOG.md --- packages/url_launcher/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/url_launcher/CHANGELOG.md b/packages/url_launcher/CHANGELOG.md index 7499dae667b2..ea0bf686f93c 100644 --- a/packages/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/CHANGELOG.md @@ -1,4 +1,4 @@ -## 5.0.6 +## 5.1.0 * Add `headers` field to enable headers in the Android implementation. From b01ff19fce33a8b1dd8245a473ba06e6121a998e Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 15 Jul 2019 17:24:07 -0700 Subject: [PATCH 6/7] Update pubspec.yaml --- packages/url_launcher/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/url_launcher/pubspec.yaml b/packages/url_launcher/pubspec.yaml index 2d89cacd333d..864e803d5552 100644 --- a/packages/url_launcher/pubspec.yaml +++ b/packages/url_launcher/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher -version: 5.0.6 +version: 5.1.0 flutter: plugin: From e6631c92ef4cf0a3625f2a3be0d5216e9e98bd49 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Mon, 15 Jul 2019 17:31:27 -0700 Subject: [PATCH 7/7] Document [headers] --- packages/url_launcher/lib/url_launcher.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/url_launcher/lib/url_launcher.dart b/packages/url_launcher/lib/url_launcher.dart index 757179e9a375..045448fbde97 100644 --- a/packages/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/lib/url_launcher.dart @@ -44,6 +44,7 @@ const MethodChannel _channel = MethodChannel('plugins.flutter.io/url_launcher'); /// javascript. /// [enableDomStorage] is an Android only setting. If true, WebView enable /// DOM storage. +/// [headers] is an Android only setting that adds headers to the WebView. /// /// Note that if any of the above are set to true but the URL is not a web URL, /// this will throw a [PlatformException].