From 0471de479dadb95f20a40dcbeb46a21ea925478e Mon Sep 17 00:00:00 2001 From: Simon Lightfoot Date: Wed, 12 May 2021 20:04:58 +0100 Subject: [PATCH] Make initial loading take headers --- .../flutter/plugins/webviewflutter/FlutterWebView.java | 6 +++++- packages/webview_flutter/ios/Classes/FlutterWebView.m | 7 ++++++- packages/webview_flutter/lib/platform_interface.dart | 9 ++++++++- .../webview_flutter/lib/src/webview_method_channel.dart | 1 + packages/webview_flutter/lib/webview_flutter.dart | 5 +++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java index ebc7c31987f4..ca13e2579752 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java @@ -130,7 +130,11 @@ public void onProgressChanged(WebView view, int progress) { } if (params.containsKey("initialUrl")) { String url = (String) params.get("initialUrl"); - webView.loadUrl(url); + Map headers = (Map) params.get("headers"); + if (headers == null) { + headers = Collections.emptyMap(); + } + webView.loadUrl(url, headers); } } diff --git a/packages/webview_flutter/ios/Classes/FlutterWebView.m b/packages/webview_flutter/ios/Classes/FlutterWebView.m index 8f4053a0b822..7047717c33ab 100644 --- a/packages/webview_flutter/ios/Classes/FlutterWebView.m +++ b/packages/webview_flutter/ios/Classes/FlutterWebView.m @@ -116,7 +116,12 @@ - (instancetype)initWithFrame:(CGRect)frame NSString* initialUrl = args[@"initialUrl"]; if ([initialUrl isKindOfClass:[NSString class]]) { - [self loadUrl:initialUrl]; + id headers = args[@"headers"]; + if ([headers isKindOfClass:[NSDictionary class]]) { + [self loadUrl:initialUrl withHeaders:headers]; + } else { + [self loadUrl:initialUrl]; + } } } return self; diff --git a/packages/webview_flutter/lib/platform_interface.dart b/packages/webview_flutter/lib/platform_interface.dart index 92aa87b7480f..c79d43a45f8b 100644 --- a/packages/webview_flutter/lib/platform_interface.dart +++ b/packages/webview_flutter/lib/platform_interface.dart @@ -450,6 +450,7 @@ class CreationParams { /// The `autoMediaPlaybackPolicy` parameter must not be null. CreationParams({ this.initialUrl, + this.headers, this.webSettings, this.javascriptChannelNames = const {}, this.userAgent, @@ -462,6 +463,12 @@ class CreationParams { /// When null the webview will be created without loading any page. final String? initialUrl; + /// The headers to load with the [initialUrl] + /// + /// If `headers` is not null and the URL is an HTTP URL, the key value paris in `headers` will + /// be added as key value pairs of HTTP headers for the request. + final Map? headers; + /// The initial [WebSettings] for the new webview. /// /// This can later be updated with [WebViewPlatformController.updateSettings]. @@ -490,7 +497,7 @@ class CreationParams { @override String toString() { - return '$runtimeType(initialUrl: $initialUrl, settings: $webSettings, javascriptChannelNames: $javascriptChannelNames, UserAgent: $userAgent)'; + return '$runtimeType(initialUrl: $initialUrl, headers: $headers, settings: $webSettings, javascriptChannelNames: $javascriptChannelNames, UserAgent: $userAgent)'; } } diff --git a/packages/webview_flutter/lib/src/webview_method_channel.dart b/packages/webview_flutter/lib/src/webview_method_channel.dart index 05831a9d8794..6f5d8ebf07f6 100644 --- a/packages/webview_flutter/lib/src/webview_method_channel.dart +++ b/packages/webview_flutter/lib/src/webview_method_channel.dart @@ -206,6 +206,7 @@ class MethodChannelWebViewPlatform implements WebViewPlatformController { }) { return { 'initialUrl': creationParams.initialUrl, + 'headers': creationParams.headers, 'settings': _webSettingsToMap(creationParams.webSettings), 'javascriptChannelNames': creationParams.javascriptChannelNames.toList(), 'userAgent': creationParams.userAgent, diff --git a/packages/webview_flutter/lib/webview_flutter.dart b/packages/webview_flutter/lib/webview_flutter.dart index 74d8af8d4687..830bdbd768b4 100644 --- a/packages/webview_flutter/lib/webview_flutter.dart +++ b/packages/webview_flutter/lib/webview_flutter.dart @@ -217,6 +217,7 @@ class WebView extends StatefulWidget { Key? key, this.onWebViewCreated, this.initialUrl, + this.headers, this.javascriptMode = JavascriptMode.disabled, this.javascriptChannels, this.navigationDelegate, @@ -286,6 +287,9 @@ class WebView extends StatefulWidget { /// The initial URL to load. final String? initialUrl; + /// The headers used with the loading of the initial URL. + final Map? headers; + /// Whether Javascript execution is enabled. final JavascriptMode javascriptMode; @@ -475,6 +479,7 @@ class _WebViewState extends State { CreationParams _creationParamsfromWidget(WebView widget) { return CreationParams( initialUrl: widget.initialUrl, + headers: widget.headers, webSettings: _webSettingsFromWidget(widget), javascriptChannelNames: _extractChannelNames(widget.javascriptChannels), userAgent: widget.userAgent,