[webview_flutter] Add a backgroundColor option to the Android webview (#4569)
This PR add an option to set the background color of the Android webview.
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_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 479364f..caee5f7 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.5.0
+
+* Adds an option to set the background color of the webview.
+
## 2.4.0
* Adds support for Android's `WebView.loadData` and `WebView.loadDataWithBaseUrl` methods and implements the `loadFile` and `loadHtmlString` methods from the platform interface.
@@ -27,13 +31,12 @@
## 2.0.15
-* Added Overrides in FlutterWebView.java
-
+* Added Overrides in FlutterWebView.java
+
## 2.0.14
-* Update example App so navigation menu loads immediatly but only becomes available when `WebViewController` is available (same behavior as example App in webview_flutter package).
+* Update example App so navigation menu loads immediatly but only becomes available when `WebViewController` is available (same behavior as example App in webview_flutter package).
## 2.0.13
* Extract Android implementation from `webview_flutter`.
-
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
index beb2d71..a5632d3 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
@@ -223,6 +223,8 @@
void setWebChromeClient(Long instanceId, Long clientInstanceId);
+ void setBackgroundColor(Long instanceId, Long color);
+
/** The codec used by WebViewHostApi. */
static MessageCodec<Object> getCodec() {
return WebViewHostApiCodec.INSTANCE;
@@ -958,6 +960,37 @@
channel.setMessageHandler(null);
}
}
+ {
+ BasicMessageChannel<Object> channel =
+ new BasicMessageChannel<>(
+ binaryMessenger,
+ "dev.flutter.pigeon.WebViewHostApi.setBackgroundColor",
+ getCodec());
+ if (api != null) {
+ channel.setMessageHandler(
+ (message, reply) -> {
+ Map<String, Object> wrapped = new HashMap<>();
+ try {
+ ArrayList<Object> args = (ArrayList<Object>) message;
+ Number instanceIdArg = (Number) args.get(0);
+ if (instanceIdArg == null) {
+ throw new NullPointerException("instanceIdArg unexpectedly null.");
+ }
+ Number colorArg = (Number) args.get(1);
+ if (colorArg == null) {
+ throw new NullPointerException("colorArg unexpectedly null.");
+ }
+ api.setBackgroundColor(instanceIdArg.longValue(), colorArg.longValue());
+ wrapped.put("result", null);
+ } catch (Error | RuntimeException exception) {
+ wrapped.put("error", wrapError(exception));
+ }
+ reply.reply(wrapped);
+ });
+ } else {
+ channel.setMessageHandler(null);
+ }
+ }
}
}
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
index b557e98..78b06aa 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
@@ -502,6 +502,12 @@
webView.setWebChromeClient((WebChromeClient) instanceManager.getInstance(clientInstanceId));
}
+ @Override
+ public void setBackgroundColor(Long instanceId, Long color) {
+ final WebView webView = (WebView) instanceManager.getInstance(instanceId);
+ webView.setBackgroundColor(color.intValue());
+ }
+
@Nullable
private static String parseNullStringIdentifier(String value) {
if (value.equals(nullStringIdentifier)) {
diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/src/androidTest/java/io/flutter/plugins/webviewflutterexample/BackgroundColorTest.java b/packages/webview_flutter/webview_flutter_android/example/android/app/src/androidTest/java/io/flutter/plugins/webviewflutterexample/BackgroundColorTest.java
new file mode 100644
index 0000000..a63629e
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_android/example/android/app/src/androidTest/java/io/flutter/plugins/webviewflutterexample/BackgroundColorTest.java
@@ -0,0 +1,61 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package io.flutter.plugins.webviewflutterexample;
+
+import static androidx.test.espresso.flutter.EspressoFlutter.onFlutterWidget;
+import static androidx.test.espresso.flutter.action.FlutterActions.click;
+import static androidx.test.espresso.flutter.matcher.FlutterMatchers.withText;
+import static androidx.test.espresso.flutter.matcher.FlutterMatchers.withValueKey;
+import static org.junit.Assert.assertEquals;
+
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.runner.screenshot.ScreenCapture;
+import androidx.test.runner.screenshot.Screenshot;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class BackgroundColorTest {
+ @Rule
+ public ActivityTestRule<DriverExtensionActivity> myActivityTestRule =
+ new ActivityTestRule<>(DriverExtensionActivity.class, true, false);
+
+ @Before
+ public void setUp() {
+ ActivityScenario.launch(DriverExtensionActivity.class);
+ }
+
+ @Ignore("Doesn't run in Firebase Test Lab: https://github.com/flutter/flutter/issues/94748")
+ @Test
+ public void backgroundColor() {
+ onFlutterWidget(withValueKey("ShowPopupMenu")).perform(click());
+ onFlutterWidget(withValueKey("ShowTransparentBackgroundExample")).perform(click());
+ onFlutterWidget(withText("Transparent background test"));
+
+ final ScreenCapture screenCapture = Screenshot.capture();
+ final Bitmap screenBitmap = screenCapture.getBitmap();
+
+ final int centerLeftColor =
+ screenBitmap.getPixel(10, (int) Math.floor(screenBitmap.getHeight() / 2.0));
+ final int centerColor =
+ screenBitmap.getPixel(
+ (int) Math.floor(screenBitmap.getWidth() / 2.0),
+ (int) Math.floor(screenBitmap.getHeight() / 2.0));
+
+ // Flutter Colors.green color : 0xFF4CAF50
+ // https://github.com/flutter/flutter/blob/f4abaa0735eba4dfd8f33f73363911d63931fe03/packages/flutter/lib/src/material/colors.dart#L1208
+ // The background color of the webview is : rgba(0, 0, 0, 0.5)
+ // The expected color is : rgba(38, 87, 40, 1) -> 0xFF265728
+ assertEquals(0xFF265728, centerLeftColor);
+ assertEquals(Color.RED, centerColor);
+ }
+}
diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/src/debug/AndroidManifest.xml b/packages/webview_flutter/webview_flutter_android/example/android/app/src/debug/AndroidManifest.xml
index 2879220..110b9ab 100644
--- a/packages/webview_flutter/webview_flutter_android/example/android/app/src/debug/AndroidManifest.xml
+++ b/packages/webview_flutter/webview_flutter_android/example/android/app/src/debug/AndroidManifest.xml
@@ -13,5 +13,13 @@
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
</activity>
+ <activity
+ android:name=".DriverExtensionActivity"
+ android:launchMode="singleTop"
+ android:theme="@style/LaunchTheme"
+ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
+ android:hardwareAccelerated="true"
+ android:windowSoftInputMode="adjustResize">
+ </activity>
</application>
</manifest>
diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/DriverExtensionActivity.java b/packages/webview_flutter/webview_flutter_android/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/DriverExtensionActivity.java
new file mode 100644
index 0000000..59e1b04
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_android/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/DriverExtensionActivity.java
@@ -0,0 +1,16 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package io.flutter.plugins.webviewflutterexample;
+
+import androidx.annotation.NonNull;
+import io.flutter.embedding.android.FlutterActivity;
+
+public class DriverExtensionActivity extends FlutterActivity {
+ @Override
+ @NonNull
+ public String getDartEntrypointFunctionName() {
+ return "appMain";
+ }
+}
diff --git a/packages/webview_flutter/webview_flutter_android/example/lib/main.dart b/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
index bc43c16..0c04c8c 100644
--- a/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
@@ -9,6 +9,7 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_driver/driver_extension.dart';
import 'package:path_provider/path_provider.dart';
import 'package:webview_flutter_android/webview_surface_android.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
@@ -17,6 +18,11 @@
import 'navigation_request.dart';
import 'web_view.dart';
+void appMain() {
+ enableFlutterDriverExtension();
+ main();
+}
+
void main() {
// Configure the [WebView] to use the [SurfaceAndroidWebView]
// implementation instead of the default [AndroidWebView].
@@ -59,6 +65,27 @@
</html>
''';
+const String kTransparentBackgroundPage = '''
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Transparent background test</title>
+</head>
+<style type="text/css">
+ body { background: transparent; margin: 0; padding: 0; }
+ #container { position: relative; margin: 0; padding: 0; width: 100vw; height: 100vh; }
+ #shape { background: #FF0000; width: 200px; height: 100%; margin: 0; padding: 0; position: absolute; top: 0; bottom: 0; left: calc(50% - 100px); }
+ p { text-align: center; }
+</style>
+<body>
+ <div id="container">
+ <p>Transparent background test</p>
+ <div id="shape"></div>
+ </div>
+</body>
+</html>
+''';
+
class _WebViewExample extends StatefulWidget {
const _WebViewExample({Key? key}) : super(key: key);
@@ -73,6 +100,7 @@
@override
Widget build(BuildContext context) {
return Scaffold(
+ backgroundColor: const Color(0xFF4CAF50),
appBar: AppBar(
title: const Text('Flutter WebView example'),
// This drop down menu demonstrates that Flutter widgets can be shown over the web view.
@@ -109,6 +137,7 @@
javascriptChannels: _createJavascriptChannels(context),
javascriptMode: JavascriptMode.unrestricted,
userAgent: 'Custom_User_Agent',
+ backgroundColor: const Color(0x80000000),
);
}),
floatingActionButton: favoriteButton(),
@@ -158,6 +187,7 @@
navigationDelegate,
loadLocalFile,
loadHtmlString,
+ transparentBackground,
}
class _SampleMenu extends StatelessWidget {
@@ -172,6 +202,7 @@
builder:
(BuildContext context, AsyncSnapshot<WebViewController> controller) {
return PopupMenuButton<_MenuOptions>(
+ key: const ValueKey<String>('ShowPopupMenu'),
onSelected: (_MenuOptions value) {
switch (value) {
case _MenuOptions.showUserAgent:
@@ -201,6 +232,9 @@
case _MenuOptions.loadHtmlString:
_onLoadHtmlStringExample(controller.data!, context);
break;
+ case _MenuOptions.transparentBackground:
+ _onTransparentBackground(controller.data!, context);
+ break;
}
},
itemBuilder: (BuildContext context) => <PopupMenuItem<_MenuOptions>>[
@@ -241,6 +275,11 @@
value: _MenuOptions.loadLocalFile,
child: Text('Load local file'),
),
+ const PopupMenuItem<_MenuOptions>(
+ key: ValueKey<String>('ShowTransparentBackgroundExample'),
+ value: _MenuOptions.transparentBackground,
+ child: Text('Transparent background example'),
+ ),
],
);
},
@@ -353,6 +392,11 @@
return indexFile.path;
}
+
+ Future<void> _onTransparentBackground(
+ WebViewController controller, BuildContext context) async {
+ await controller.loadHtmlString(kTransparentBackgroundPage);
+ }
}
class _NavigationControls extends StatelessWidget {
diff --git a/packages/webview_flutter/webview_flutter_android/example/lib/web_view.dart b/packages/webview_flutter/webview_flutter_android/example/lib/web_view.dart
index 654abbd..395966b 100644
--- a/packages/webview_flutter/webview_flutter_android/example/lib/web_view.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/lib/web_view.dart
@@ -76,6 +76,7 @@
this.initialMediaPlaybackPolicy =
AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
this.allowsInlineMediaPlayback = false,
+ this.backgroundColor,
}) : assert(javascriptMode != null),
assert(initialMediaPlaybackPolicy != null),
assert(allowsInlineMediaPlayback != null),
@@ -236,6 +237,12 @@
/// The default policy is [AutoMediaPlaybackPolicy.require_user_action_for_all_media_types].
final AutoMediaPlaybackPolicy initialMediaPlaybackPolicy;
+ /// The background color of the [WebView].
+ ///
+ /// When `null` the platform's webview default background color is used. By
+ /// default [backgroundColor] is `null`.
+ final Color? backgroundColor;
+
@override
_WebViewState createState() => _WebViewState();
}
@@ -287,6 +294,7 @@
_javascriptChannelRegistry.channels.keys.toSet(),
autoMediaPlaybackPolicy: widget.initialMediaPlaybackPolicy,
userAgent: widget.userAgent,
+ backgroundColor: widget.backgroundColor,
),
javascriptChannelRegistry: _javascriptChannelRegistry,
);
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
index 928cdb3..ecd6f33 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:ui';
+
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart' show AndroidViewSurface;
@@ -349,6 +351,11 @@
return api.setWebChromeClientFromInstance(this, client);
}
+ /// Sets the background color of this WebView.
+ Future<void> setBackgroundColor(Color color) {
+ return api.setBackgroundColorFromInstance(this, color.value);
+ }
+
/// Releases all resources used by the [WebView].
///
/// Any methods called after [release] will throw an exception.
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
index 9bf2de6..ae528a6 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
@@ -708,6 +708,31 @@
return;
}
}
+
+ Future<void> setBackgroundColor(int arg_instanceId, int arg_color) async {
+ final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+ 'dev.flutter.pigeon.WebViewHostApi.setBackgroundColor', codec,
+ binaryMessenger: _binaryMessenger);
+ final Map<Object?, Object?>? replyMap = await channel
+ .send(<Object>[arg_instanceId, arg_color]) as Map<Object?, Object?>?;
+ if (replyMap == null) {
+ throw PlatformException(
+ code: 'channel-error',
+ message: 'Unable to establish connection on channel.',
+ details: null,
+ );
+ } else if (replyMap['error'] != null) {
+ final Map<Object?, Object?> error =
+ (replyMap['error'] as Map<Object?, Object?>?)!;
+ throw PlatformException(
+ code: (error['code'] as String?)!,
+ message: error['message'] as String?,
+ details: error['details'],
+ );
+ } else {
+ return;
+ }
+ }
}
class _WebSettingsHostApiCodec extends StandardMessageCodec {
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
index ece05b5..51efdaa 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
@@ -278,6 +278,11 @@
instanceManager.getInstanceId(client)!,
);
}
+
+ /// Helper method to convert instances ids to objects.
+ Future<void> setBackgroundColorFromInstance(WebView instance, int color) {
+ return setBackgroundColor(instanceManager.getInstanceId(instance)!, color);
+ }
}
/// Host api implementation for [WebSettings].
diff --git a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
index c264bc1..0bfa04f 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
@@ -298,6 +298,11 @@
AutoMediaPlaybackPolicy.always_allow,
);
+ final Color? backgroundColor = creationParams.backgroundColor;
+ if (backgroundColor != null) {
+ webView.setBackgroundColor(backgroundColor);
+ }
+
addJavascriptChannels(creationParams.javascriptChannelNames);
}
diff --git a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
index 9632163..0fdec2c 100644
--- a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
+++ b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
@@ -87,6 +87,8 @@
void setDownloadListener(int instanceId, int listenerInstanceId);
void setWebChromeClient(int instanceId, int clientInstanceId);
+
+ void setBackgroundColor(int instanceId, int color);
}
@HostApi(dartHostTestHandler: 'TestWebSettingsHostApi')
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 8889469..75245a3 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin that provides a WebView widget on Android.
repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter_android
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 2.4.0
+version: 2.5.0
environment:
sdk: ">=2.14.0 <3.0.0"
@@ -19,7 +19,7 @@
dependencies:
flutter:
sdk: flutter
- webview_flutter_platform_interface: ^1.5.2
+ webview_flutter_platform_interface: ^1.7.0
dev_dependencies:
build_runner: ^2.1.4
@@ -30,4 +30,3 @@
mockito: ^5.0.16
pedantic: ^1.10.0
pigeon: 1.0.9
-
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart
index 45988a0..942e59a 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart
@@ -4,7 +4,7 @@
// Autogenerated from Pigeon (v1.0.9), do not edit directly.
// See also: https://pub.dev/packages/pigeon
-// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, avoid_relative_lib_imports, unnecessary_parenthesis
+// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import
// @dart = 2.12
import 'dart:async';
import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
@@ -46,6 +46,7 @@
void removeJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId);
void setDownloadListener(int instanceId, int listenerInstanceId);
void setWebChromeClient(int instanceId, int clientInstanceId);
+ void setBackgroundColor(int instanceId, int color);
static void setup(TestWebViewHostApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@@ -577,6 +578,28 @@
});
}
}
+ {
+ final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+ 'dev.flutter.pigeon.WebViewHostApi.setBackgroundColor', codec,
+ binaryMessenger: binaryMessenger);
+ if (api == null) {
+ channel.setMockMessageHandler(null);
+ } else {
+ channel.setMockMessageHandler((Object? message) async {
+ assert(message != null,
+ 'Argument for dev.flutter.pigeon.WebViewHostApi.setBackgroundColor was null.');
+ final List<Object?> args = (message as List<Object?>?)!;
+ final int? arg_instanceId = (args[0] as int?);
+ assert(arg_instanceId != null,
+ 'Argument for dev.flutter.pigeon.WebViewHostApi.setBackgroundColor was null, expected non-null int.');
+ final int? arg_color = (args[1] as int?);
+ assert(arg_color != null,
+ 'Argument for dev.flutter.pigeon.WebViewHostApi.setBackgroundColor was null, expected non-null int.');
+ api.setBackgroundColor(arg_instanceId!, arg_color!);
+ return <Object?, Object?>{};
+ });
+ }
+ }
}
}
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
index 90cbf2c..3c1cd61 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
@@ -3,6 +3,7 @@
// Do not manually edit this file.
import 'dart:async' as _i4;
+import 'dart:ui' as _i5;
import 'package:mockito/mockito.dart' as _i1;
import 'package:webview_flutter_android/src/android_webview.dart' as _i2;
@@ -332,6 +333,10 @@
#setWebChromeClient, [instanceId, clientInstanceId]),
returnValueForMissingStub: null);
@override
+ void setBackgroundColor(int? instanceId, int? color) => super.noSuchMethod(
+ Invocation.method(#setBackgroundColor, [instanceId, color]),
+ returnValueForMissingStub: null);
+ @override
String toString() => super.toString();
}
@@ -485,6 +490,11 @@
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
+ _i4.Future<void> setBackgroundColor(_i5.Color? color) =>
+ (super.noSuchMethod(Invocation.method(#setBackgroundColor, [color]),
+ returnValue: Future<void>.value(),
+ returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
+ @override
_i4.Future<void> release() =>
(super.noSuchMethod(Invocation.method(#release, []),
returnValue: Future<void>.value(),
diff --git a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.mocks.dart
index 0582049..6ee53f9 100644
--- a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.mocks.dart
@@ -3,10 +3,11 @@
// Do not manually edit this file.
import 'dart:async' as _i4;
+import 'dart:ui' as _i5;
import 'package:mockito/mockito.dart' as _i1;
import 'package:webview_flutter_android/src/android_webview.dart' as _i2;
-import 'package:webview_flutter_android/webview_android_widget.dart' as _i5;
+import 'package:webview_flutter_android/webview_android_widget.dart' as _i6;
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'
as _i3;
@@ -229,6 +230,11 @@
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
@override
+ _i4.Future<void> setBackgroundColor(_i5.Color? color) =>
+ (super.noSuchMethod(Invocation.method(#setBackgroundColor, [color]),
+ returnValue: Future<void>.value(),
+ returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
+ @override
_i4.Future<void> release() =>
(super.noSuchMethod(Invocation.method(#release, []),
returnValue: Future<void>.value(),
@@ -241,7 +247,7 @@
///
/// See the documentation for Mockito's code generation for more information.
class MockWebViewAndroidDownloadListener extends _i1.Mock
- implements _i5.WebViewAndroidDownloadListener {
+ implements _i6.WebViewAndroidDownloadListener {
MockWebViewAndroidDownloadListener() {
_i1.throwOnMissingStub(this);
}
@@ -267,7 +273,7 @@
///
/// See the documentation for Mockito's code generation for more information.
class MockWebViewAndroidJavaScriptChannel extends _i1.Mock
- implements _i5.WebViewAndroidJavaScriptChannel {
+ implements _i6.WebViewAndroidJavaScriptChannel {
MockWebViewAndroidJavaScriptChannel() {
_i1.throwOnMissingStub(this);
}
@@ -293,7 +299,7 @@
///
/// See the documentation for Mockito's code generation for more information.
class MockWebViewAndroidWebChromeClient extends _i1.Mock
- implements _i5.WebViewAndroidWebChromeClient {
+ implements _i6.WebViewAndroidWebChromeClient {
MockWebViewAndroidWebChromeClient() {
_i1.throwOnMissingStub(this);
}
@@ -310,7 +316,7 @@
///
/// See the documentation for Mockito's code generation for more information.
class MockWebViewAndroidWebViewClient extends _i1.Mock
- implements _i5.WebViewAndroidWebViewClient {
+ implements _i6.WebViewAndroidWebViewClient {
MockWebViewAndroidWebViewClient() {
_i1.throwOnMissingStub(this);
}
@@ -442,7 +448,7 @@
/// A class which mocks [WebViewProxy].
///
/// See the documentation for Mockito's code generation for more information.
-class MockWebViewProxy extends _i1.Mock implements _i5.WebViewProxy {
+class MockWebViewProxy extends _i1.Mock implements _i6.WebViewProxy {
MockWebViewProxy() {
_i1.throwOnMissingStub(this);
}