[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', () {