[webview_flutter] Implements the loadFlutterAsset in the app facing package. (#4593)
diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index 1df7e53..4906003 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 0000000..9895dd3
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter/example/assets/www/index.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<!-- 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. -->
+<html lang="en">
+<head>
+<title>Load file or HTML string example</title>
+<link rel="stylesheet" href="styles/style.css" />
+</head>
+<body>
+
+<h1>Local demo page</h1>
+<p>
+ This is an example page used to demonstrate how to load a local file or HTML
+ string using the <a href="https://pub.dev/packages/webview_flutter">Flutter
+ webview</a> plugin.
+</p>
+
+</body>
+</html>
\ 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 0000000..c2140b8
--- /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 65786de..88c240a 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 @@
navigationDelegate,
doPostRequest,
loadLocalFile,
+ loadFlutterAsset,
loadHtmlString,
transparentBackground,
setCookie,
@@ -227,6 +228,9 @@
case MenuOptions.loadLocalFile:
_onLoadLocalFileExample(controller.data!, context);
break;
+ case MenuOptions.loadFlutterAsset:
+ _onLoadFlutterAssetExample(controller.data!, context);
+ break;
case MenuOptions.loadHtmlString:
_onLoadHtmlStringExample(controller.data!, context);
break;
@@ -281,6 +285,10 @@
child: Text('Load local file'),
),
const PopupMenuItem<MenuOptions>(
+ value: MenuOptions.loadFlutterAsset,
+ child: Text('Load Flutter Asset'),
+ ),
+ const PopupMenuItem<MenuOptions>(
key: ValueKey<String>('ShowTransparentBackgroundExample'),
value: MenuOptions.transparentBackground,
child: Text('Transparent background example'),
@@ -392,6 +400,11 @@
await controller.loadFile(pathToIndex);
}
+ Future<void> _onLoadFlutterAssetExample(
+ WebViewController controller, BuildContext context) async {
+ await controller.loadFlutterAsset('assets/www/index.html');
+ }
+
Future<void> _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 284a7a9..ae3b57e 100644
--- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml
@@ -33,3 +33,5 @@
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 8fe4f41..7b907a5 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 @@
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<void> 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 cd6c618..4ac5e1d 100644
--- a/packages/webview_flutter/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/pubspec.yaml
@@ -2,7 +2,7 @@
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 @@
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 40baef7..ad25cad 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 @@
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(