From 2a6ab204bc6e1fd14066c51a8586f719a3f672e2 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 7 Dec 2021 20:56:56 +0100 Subject: [PATCH 1/2] Implements the loadFlutterAsset method from platform interface. --- .../example/assets/www/index.html | 20 +++++++++++ .../example/assets/www/styles/style.css | 3 ++ .../webview_flutter/example/lib/main.dart | 13 +++++++ .../webview_flutter/example/pubspec.yaml | 2 ++ .../webview_flutter/lib/src/webview.dart | 9 +++++ .../webview_flutter/pubspec.yaml | 2 +- .../test/webview_flutter_test.dart | 34 +++++++++++++++++++ 7 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 packages/webview_flutter/webview_flutter/example/assets/www/index.html create mode 100644 packages/webview_flutter/webview_flutter/example/assets/www/styles/style.css 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 02e6ef85ec61..8fa831c57f07 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, } @@ -226,6 +227,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; @@ -276,6 +280,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, @@ -375,6 +383,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 d76f7b359482..a7adb52fca0f 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/webview.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/webview.dart @@ -518,6 +518,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 1bc6bab8b3ff..d5505ddd37d5 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -19,7 +19,7 @@ flutter: dependencies: flutter: sdk: flutter - webview_flutter_android: ^2.7.0 + webview_flutter_android: ^2.8.0 webview_flutter_platform_interface: ^1.8.0 webview_flutter_wkwebview: ^2.5.0 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 d422402dbae7..747a42f82201 100644 --- a/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart @@ -124,6 +124,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( From 6c35727dd4aa56e2160defee07ceab6e2461cf64 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 7 Dec 2021 21:11:11 +0100 Subject: [PATCH 2/2] Update version and changelog --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 4 ++++ packages/webview_flutter/webview_flutter/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index a9e133d08d47..8c65696ce1ab 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.7.0 + +* Adds support for the `loadFlutterAsset` method. + ## 2.6.0 * Adds support for the `loadRequest` method. diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index d5505ddd37d5..33b6fb7f7fcb 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.6.0 +version: 2.7.0 environment: sdk: ">=2.14.0 <3.0.0"