diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index 1df7e53d8e92..4906003a2e02 100644
--- a/packages/webview_flutter/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.8.0
+
+* Adds support for the `loadFlutterAsset` method.
+
## 2.7.0
* Adds `setCookie` to CookieManager.
diff --git a/packages/webview_flutter/webview_flutter/example/assets/www/index.html b/packages/webview_flutter/webview_flutter/example/assets/www/index.html
new file mode 100644
index 000000000000..9895dd3ce6cb
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter/example/assets/www/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+Load file or HTML string example
+
+
+
+
+Local demo page
+
+ This is an example page used to demonstrate how to load a local file or HTML
+ string using the Flutter
+ webview plugin.
+
+
+
+
\ No newline at end of file
diff --git a/packages/webview_flutter/webview_flutter/example/assets/www/styles/style.css b/packages/webview_flutter/webview_flutter/example/assets/www/styles/style.css
new file mode 100644
index 000000000000..c2140b8b0fd8
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter/example/assets/www/styles/style.css
@@ -0,0 +1,3 @@
+h1 {
+ color: blue;
+}
\ No newline at end of file
diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart
index 65786de1f8b9..88c240a7316c 100644
--- a/packages/webview_flutter/webview_flutter/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart
@@ -179,6 +179,7 @@ enum MenuOptions {
navigationDelegate,
doPostRequest,
loadLocalFile,
+ loadFlutterAsset,
loadHtmlString,
transparentBackground,
setCookie,
@@ -227,6 +228,9 @@ class SampleMenu extends StatelessWidget {
case MenuOptions.loadLocalFile:
_onLoadLocalFileExample(controller.data!, context);
break;
+ case MenuOptions.loadFlutterAsset:
+ _onLoadFlutterAssetExample(controller.data!, context);
+ break;
case MenuOptions.loadHtmlString:
_onLoadHtmlStringExample(controller.data!, context);
break;
@@ -280,6 +284,10 @@ class SampleMenu extends StatelessWidget {
value: MenuOptions.loadLocalFile,
child: Text('Load local file'),
),
+ const PopupMenuItem(
+ value: MenuOptions.loadFlutterAsset,
+ child: Text('Load Flutter Asset'),
+ ),
const PopupMenuItem(
key: ValueKey('ShowTransparentBackgroundExample'),
value: MenuOptions.transparentBackground,
@@ -392,6 +400,11 @@ class SampleMenu extends StatelessWidget {
await controller.loadFile(pathToIndex);
}
+ Future _onLoadFlutterAssetExample(
+ WebViewController controller, BuildContext context) async {
+ await controller.loadFlutterAsset('assets/www/index.html');
+ }
+
Future _onLoadHtmlStringExample(
WebViewController controller, BuildContext context) async {
await controller.loadHtmlString(kLocalExamplePage);
diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml
index 284a7a9d5a0d..ae3b57e07a89 100644
--- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml
@@ -33,3 +33,5 @@ flutter:
assets:
- assets/sample_audio.ogg
- assets/sample_video.mp4
+ - assets/www/index.html
+ - assets/www/styles/style.css
diff --git a/packages/webview_flutter/webview_flutter/lib/src/webview.dart b/packages/webview_flutter/webview_flutter/lib/src/webview.dart
index 8fe4f4147cd9..7b907a5f8bb2 100644
--- a/packages/webview_flutter/webview_flutter/lib/src/webview.dart
+++ b/packages/webview_flutter/webview_flutter/lib/src/webview.dart
@@ -526,6 +526,15 @@ class WebViewController {
return _webViewPlatformController.loadFile(absoluteFilePath);
}
+ /// Loads the Flutter asset specified in the pubspec.yaml file.
+ ///
+ /// Throws an ArgumentError if [key] is not part of the specified assets
+ /// in the pubspec.yaml file.
+ Future loadFlutterAsset(String key) {
+ assert(key.isNotEmpty);
+ return _webViewPlatformController.loadFlutterAsset(key);
+ }
+
/// Loads the supplied HTML string.
///
/// The [baseUrl] parameter is used when resolving relative URLs within the
diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml
index cd6c618025fe..4ac5e1d8add3 100644
--- a/packages/webview_flutter/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/pubspec.yaml
@@ -2,7 +2,7 @@ name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 2.7.0
+version: 2.8.0
environment:
sdk: ">=2.14.0 <3.0.0"
@@ -21,7 +21,7 @@ dependencies:
sdk: flutter
webview_flutter_android: ^2.8.0
webview_flutter_platform_interface: ^1.8.0
- webview_flutter_wkwebview: ^2.6.0
+ webview_flutter_wkwebview: ^2.7.0
dev_dependencies:
build_runner: ^2.1.5
diff --git a/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart
index 40baef7e0ab5..ad25cadf1dc4 100644
--- a/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart
@@ -131,6 +131,40 @@ void main() {
expect(() => controller!.loadFile(''), throwsAssertionError);
});
+ testWidgets('Load Flutter asset', (WidgetTester tester) async {
+ WebViewController? controller;
+ await tester.pumpWidget(
+ WebView(
+ onWebViewCreated: (WebViewController webViewController) {
+ controller = webViewController;
+ },
+ ),
+ );
+
+ expect(controller, isNotNull);
+
+ await controller!.loadFlutterAsset('assets/index.html');
+
+ verify(mockWebViewPlatformController.loadFlutterAsset(
+ 'assets/index.html',
+ ));
+ });
+
+ testWidgets('Load Flutter asset with empty key', (WidgetTester tester) async {
+ WebViewController? controller;
+ await tester.pumpWidget(
+ WebView(
+ onWebViewCreated: (WebViewController webViewController) {
+ controller = webViewController;
+ },
+ ),
+ );
+
+ expect(controller, isNotNull);
+
+ expect(() => controller!.loadFlutterAsset(''), throwsAssertionError);
+ });
+
testWidgets('Load HTML string without base URL', (WidgetTester tester) async {
WebViewController? controller;
await tester.pumpWidget(