[webview_flutter] Add a backgroundColor option to the webview platform interface (#4567)
Part of https://github.com/flutter/plugins/pull/3431
Part of https://github.com/flutter/flutter/issues/29300
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
index d9045fa..1b8a1fd 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.7.0
+
+* Add an option to set the background color of the webview.
+
## 1.6.1
* Revert deprecation of `clearCookies` in WebViewPlatform for later deprecation.
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart
index 61e0dd7..ef1b919 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart
@@ -266,6 +266,7 @@
'userAgent': creationParams.userAgent,
'autoMediaPlaybackPolicy': creationParams.autoMediaPlaybackPolicy.index,
'usesHybridComposition': usesHybridComposition,
+ 'backgroundColor': creationParams.backgroundColor?.value,
'cookies': creationParams.cookies
.map((WebViewCookie cookie) => cookie.toJson())
.toList()
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart
index e9f5ef5..6add51c 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'package:flutter/widgets.dart';
import 'package:webview_flutter_platform_interface/src/types/types.dart';
import 'auto_media_playback_policy.dart';
@@ -22,6 +23,7 @@
this.userAgent,
this.autoMediaPlaybackPolicy =
AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
+ this.backgroundColor,
this.cookies = const <WebViewCookie>[],
}) : assert(autoMediaPlaybackPolicy != null);
@@ -56,11 +58,16 @@
/// Which restrictions apply on automatic media playback.
final AutoMediaPlaybackPolicy autoMediaPlaybackPolicy;
+ /// The background color of the webview.
+ ///
+ /// When null the platform's webview default background color is used.
+ final Color? backgroundColor;
+
/// The initial set of cookies to set before the webview does its first load.
final List<WebViewCookie> cookies;
@override
String toString() {
- return 'CreationParams(initialUrl: $initialUrl, settings: $webSettings, javascriptChannelNames: $javascriptChannelNames, UserAgent: $userAgent, cookies: $cookies)';
+ return 'CreationParams(initialUrl: $initialUrl, settings: $webSettings, javascriptChannelNames: $javascriptChannelNames, UserAgent: $userAgent, backgroundColor: $backgroundColor, cookies: $cookies)';
}
}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
index 4582397..2bad743 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.6.1
+version: 1.7.0
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart
index 0432373..3bcc2fe 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart
@@ -4,6 +4,7 @@
import 'dart:typed_data';
+import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
@@ -552,6 +553,32 @@
],
);
});
+
+ test('backgroundColor is null by default', () {
+ final CreationParams creationParams = CreationParams(
+ webSettings: WebSettings(
+ userAgent: const WebSetting<String?>.of('Dart Test'),
+ ),
+ );
+ final Map<String, dynamic> creationParamsMap =
+ MethodChannelWebViewPlatform.creationParamsToMap(creationParams);
+
+ expect(creationParamsMap['backgroundColor'], null);
+ });
+
+ test('backgroundColor is converted to an int', () {
+ const Color whiteColor = Color(0xFFFFFFFF);
+ final CreationParams creationParams = CreationParams(
+ backgroundColor: whiteColor,
+ webSettings: WebSettings(
+ userAgent: const WebSetting<String?>.of('Dart Test'),
+ ),
+ );
+ final Map<String, dynamic> creationParamsMap =
+ MethodChannelWebViewPlatform.creationParamsToMap(creationParams);
+
+ expect(creationParamsMap['backgroundColor'], whiteColor.value);
+ });
});
group('Tests on `plugins.flutter.io/cookie_manager` channel', () {