diff --git a/README.md b/README.md index ef76676e..865d2cef 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, 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 9e812d76..f11a2c6d 100644 --- a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java +++ b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java @@ -83,6 +83,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"); boolean scrollBar = call.argument("scrollBar"); if (webViewManager == null || webViewManager.closed == true) { @@ -99,6 +100,7 @@ private void openUrl(MethodCall call, MethodChannel.Result result) { clearCookies, userAgent, url, + headers, withZoom, withLocalStorage, scrollBar @@ -167,6 +169,8 @@ private void reloadUrl(MethodCall call, MethodChannel.Result result) { false, "", url, + null, + false, 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 3c9095ac..f425f919 100644 --- a/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java +++ b/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java @@ -16,6 +16,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; @@ -175,7 +177,7 @@ private void clearCache() { webView.clearFormData(); } - void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean clearCookies, String userAgent, String url, boolean withZoom, boolean withLocalStorage, boolean scrollBar) { + void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean clearCookies, String userAgent, String url, Map headers, boolean withZoom, boolean withLocalStorage, boolean scrollBar) { webView.getSettings().setJavaScriptEnabled(withJavascript); webView.getSettings().setBuiltInZoomControls(withZoom); webView.getSettings().setSupportZoom(withZoom); @@ -196,12 +198,16 @@ void openUrl(boolean withJavascript, boolean clearCache, boolean hidden, boolean if (userAgent != null) { webView.getSettings().setUserAgentString(userAgent); } - + if(!scrollBar){ webView.setVerticalScrollBarEnabled(false); } - 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 2494aeea..42cf2eea 100644 --- a/ios/Classes/FlutterWebviewPlugin.m +++ b/ios/Classes/FlutterWebviewPlugin.m @@ -123,7 +123,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 dd156ae7..0412edeb 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 @@ -78,7 +79,8 @@ class FlutterWebviewPlugin { /// Allow local files on iOs > 9.0 /// - [scrollBar]: enable or disable scrollbar Future launch(String url, - {bool withJavascript, + {Map headers, + bool withJavascript, bool clearCache, bool clearCookies, bool hidden, @@ -102,6 +104,11 @@ class FlutterWebviewPlugin { "withLocalUrl": withLocalUrl ?? false, "scrollBar": scrollBar ?? true }; + + if (headers != null) { + args["headers"] = headers; + } + if (rect != null) { args["rect"] = { "left": rect.left, @@ -134,10 +141,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 c57e716c..573db9c8 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; @@ -21,10 +22,13 @@ class WebviewScaffold extends StatefulWidget { final bool withLocalUrl; final bool scrollBar; + final Map headers; + WebviewScaffold( {Key key, this.appBar, @required this.url, + this.headers, this.withJavascript, this.clearCache, this.clearCookies, @@ -64,6 +68,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,