From 3f61e92c275922544aefae45df7e2006bfcf2bd0 Mon Sep 17 00:00:00 2001 From: Joe Park Date: Fri, 13 Jul 2018 11:04:18 +0900 Subject: [PATCH 1/2] Add headers when loading url --- .../FlutterWebviewPlugin.java | 3 +++ .../com/flutter_webview_plugin/WebviewManager.java | 10 ++++++++-- ios/Classes/FlutterWebviewPlugin.m | 8 +++++++- lib/src/base.dart | 13 ++++++++++--- lib/src/webview_scaffold.dart | 5 +++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java index a621175e..90809ddb 100644 --- a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java +++ b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java @@ -81,6 +81,7 @@ private void openUrl(MethodCall call, MethodChannel.Result result) { boolean clearCookies = call.argument("clearCookies"); boolean withZoom = call.argument("withZoom"); boolean withLocalStorage = call.argument("withLocalStorage"); + Map headers = call.argument("headers"); if (webViewManager == null || webViewManager.closed == true) { webViewManager = new WebviewManager(activity); @@ -96,6 +97,7 @@ private void openUrl(MethodCall call, MethodChannel.Result result) { clearCookies, userAgent, url, + headers, withZoom, withLocalStorage ); @@ -163,6 +165,7 @@ private void reloadUrl(MethodCall call, MethodChannel.Result result) { false, "", url, + null, false, false ); diff --git a/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java b/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java index b374b112..a9e0d585 100644 --- a/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java +++ b/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java @@ -13,6 +13,8 @@ import android.webkit.WebViewClient; import android.widget.FrameLayout; +import java.util.Map; + import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -68,7 +70,7 @@ private void clearCache() { webView.clearFormData(); } - void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean clearCookies, String userAgent, String url, boolean withZoom, boolean withLocalStorage) { + void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean clearCookies, String userAgent, String url, Map headers, boolean withZoom, boolean withLocalStorage) { webView.getSettings().setJavaScriptEnabled(withJavascript); webView.getSettings().setBuiltInZoomControls(withZoom); webView.getSettings().setSupportZoom(withZoom); @@ -90,7 +92,11 @@ void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean webView.getSettings().setUserAgentString(userAgent); } - webView.loadUrl(url); + if (headers != null) { + webView.loadUrl(url, headers); + } else { + webView.loadUrl(url); + } } void close(MethodCall call, MethodChannel.Result result) { diff --git a/ios/Classes/FlutterWebviewPlugin.m b/ios/Classes/FlutterWebviewPlugin.m index 0c9370aa..4882bdff 100644 --- a/ios/Classes/FlutterWebviewPlugin.m +++ b/ios/Classes/FlutterWebviewPlugin.m @@ -120,7 +120,13 @@ - (void)navigate:(FlutterMethodCall*)call { @throw @"not available on version earlier than ios 9.0"; } } else { - NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; + NSDictionary *headers = call.arguments[@"headers"]; + + if (headers != nil) { + [request setAllHTTPHeaderFields:headers]; + } + [self.webview loadRequest:request]; } } diff --git a/lib/src/base.dart b/lib/src/base.dart index ac3ca79c..82064fda 100644 --- a/lib/src/base.dart +++ b/lib/src/base.dart @@ -61,6 +61,7 @@ class FlutterWebviewPlugin { Stream get onStateChanged => _onStateChanged.stream; /// Start the Webview with [url] + /// - [headers] specify additional HTTP headers /// - [withJavascript] enable Javascript or not for the Webview /// iOS WebView: Not implemented yet /// - [clearCache] clear the cache of the Webview @@ -77,7 +78,8 @@ class FlutterWebviewPlugin { /// - [withLocalUrl]: allow url as a local path /// Allow local files on iOs > 9.0 Future launch(String url, - {bool withJavascript, + {Map headers, + bool withJavascript, bool clearCache, bool clearCookies, bool hidden, @@ -99,6 +101,11 @@ class FlutterWebviewPlugin { "withLocalStorage": withLocalStorage ?? true, "withLocalUrl": withLocalUrl ?? false }; + + if (headers != null) { + args["headers"] = headers; + } + if (rect != null) { args["rect"] = { "left": rect.left, @@ -131,10 +138,10 @@ class FlutterWebviewPlugin { /// Navigates forward on the Webview. /// This is only available on Android for now. Future goForward() => _channel.invokeMethod("forward"); - + // Hides the webview Future hide() => _channel.invokeMethod("hide"); - + // Shows the webview Future show() => _channel.invokeMethod("show"); diff --git a/lib/src/webview_scaffold.dart b/lib/src/webview_scaffold.dart index 91c4a602..ccd49877 100644 --- a/lib/src/webview_scaffold.dart +++ b/lib/src/webview_scaffold.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'base.dart'; class WebviewScaffold extends StatefulWidget { + final PreferredSizeWidget appBar; final String url; final bool withJavascript; @@ -20,10 +21,13 @@ class WebviewScaffold extends StatefulWidget { final bool withLocalStorage; final bool withLocalUrl; + final Map headers; + WebviewScaffold( {Key key, this.appBar, @required this.url, + this.headers, this.withJavascript, this.clearCache, this.clearCookies, @@ -62,6 +66,7 @@ class _WebviewScaffoldState extends State { if (_rect == null) { _rect = _buildRect(context); webviewReference.launch(widget.url, + headers: widget.headers, withJavascript: widget.withJavascript, clearCache: widget.clearCache, clearCookies: widget.clearCookies, From 7454c63b1d78c8636c99d0fb0054987a338db654 Mon Sep 17 00:00:00 2001 From: Joe Park Date: Fri, 13 Jul 2018 15:17:12 +0900 Subject: [PATCH 2/2] Updated doc --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 666bdcc2..23d5b4ba 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,8 @@ flutterWebviewPlugin.launch(url, ```dart Future launch(String url, - {bool withJavascript: true, + {Map headers: null, + bool withJavascript: true, bool clearCache: false, bool clearCookies: false, bool hidden: false,