Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 7d44b40

Browse files
authored
[webview_flutter] Implements the loadFlutterAsset in the app facing package. (#4593)
1 parent 4fdf85c commit 7d44b40

File tree

8 files changed

+87
-2
lines changed

8 files changed

+87
-2
lines changed

packages/webview_flutter/webview_flutter/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.8.0
2+
3+
* Adds support for the `loadFlutterAsset` method.
4+
15
## 2.7.0
26

37
* Adds `setCookie` to CookieManager.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!DOCTYPE html>
2+
<!-- Copyright 2013 The Flutter Authors. All rights reserved.
3+
Use of this source code is governed by a BSD-style license that can be
4+
found in the LICENSE file. -->
5+
<html lang="en">
6+
<head>
7+
<title>Load file or HTML string example</title>
8+
<link rel="stylesheet" href="styles/style.css" />
9+
</head>
10+
<body>
11+
12+
<h1>Local demo page</h1>
13+
<p>
14+
This is an example page used to demonstrate how to load a local file or HTML
15+
string using the <a href="https://pub.dev/packages/webview_flutter">Flutter
16+
webview</a> plugin.
17+
</p>
18+
19+
</body>
20+
</html>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
h1 {
2+
color: blue;
3+
}

packages/webview_flutter/webview_flutter/example/lib/main.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ enum MenuOptions {
179179
navigationDelegate,
180180
doPostRequest,
181181
loadLocalFile,
182+
loadFlutterAsset,
182183
loadHtmlString,
183184
transparentBackground,
184185
setCookie,
@@ -227,6 +228,9 @@ class SampleMenu extends StatelessWidget {
227228
case MenuOptions.loadLocalFile:
228229
_onLoadLocalFileExample(controller.data!, context);
229230
break;
231+
case MenuOptions.loadFlutterAsset:
232+
_onLoadFlutterAssetExample(controller.data!, context);
233+
break;
230234
case MenuOptions.loadHtmlString:
231235
_onLoadHtmlStringExample(controller.data!, context);
232236
break;
@@ -280,6 +284,10 @@ class SampleMenu extends StatelessWidget {
280284
value: MenuOptions.loadLocalFile,
281285
child: Text('Load local file'),
282286
),
287+
const PopupMenuItem<MenuOptions>(
288+
value: MenuOptions.loadFlutterAsset,
289+
child: Text('Load Flutter Asset'),
290+
),
283291
const PopupMenuItem<MenuOptions>(
284292
key: ValueKey<String>('ShowTransparentBackgroundExample'),
285293
value: MenuOptions.transparentBackground,
@@ -392,6 +400,11 @@ class SampleMenu extends StatelessWidget {
392400
await controller.loadFile(pathToIndex);
393401
}
394402

403+
Future<void> _onLoadFlutterAssetExample(
404+
WebViewController controller, BuildContext context) async {
405+
await controller.loadFlutterAsset('assets/www/index.html');
406+
}
407+
395408
Future<void> _onLoadHtmlStringExample(
396409
WebViewController controller, BuildContext context) async {
397410
await controller.loadHtmlString(kLocalExamplePage);

packages/webview_flutter/webview_flutter/example/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ flutter:
3333
assets:
3434
- assets/sample_audio.ogg
3535
- assets/sample_video.mp4
36+
- assets/www/index.html
37+
- assets/www/styles/style.css

packages/webview_flutter/webview_flutter/lib/src/webview.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,15 @@ class WebViewController {
526526
return _webViewPlatformController.loadFile(absoluteFilePath);
527527
}
528528

529+
/// Loads the Flutter asset specified in the pubspec.yaml file.
530+
///
531+
/// Throws an ArgumentError if [key] is not part of the specified assets
532+
/// in the pubspec.yaml file.
533+
Future<void> loadFlutterAsset(String key) {
534+
assert(key.isNotEmpty);
535+
return _webViewPlatformController.loadFlutterAsset(key);
536+
}
537+
529538
/// Loads the supplied HTML string.
530539
///
531540
/// The [baseUrl] parameter is used when resolving relative URLs within the

packages/webview_flutter/webview_flutter/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter
22
description: A Flutter plugin that provides a WebView widget on Android and iOS.
33
repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
5-
version: 2.7.0
5+
version: 2.8.0
66

77
environment:
88
sdk: ">=2.14.0 <3.0.0"
@@ -21,7 +21,7 @@ dependencies:
2121
sdk: flutter
2222
webview_flutter_android: ^2.8.0
2323
webview_flutter_platform_interface: ^1.8.0
24-
webview_flutter_wkwebview: ^2.6.0
24+
webview_flutter_wkwebview: ^2.7.0
2525

2626
dev_dependencies:
2727
build_runner: ^2.1.5

packages/webview_flutter/webview_flutter/test/webview_flutter_test.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,40 @@ void main() {
131131
expect(() => controller!.loadFile(''), throwsAssertionError);
132132
});
133133

134+
testWidgets('Load Flutter asset', (WidgetTester tester) async {
135+
WebViewController? controller;
136+
await tester.pumpWidget(
137+
WebView(
138+
onWebViewCreated: (WebViewController webViewController) {
139+
controller = webViewController;
140+
},
141+
),
142+
);
143+
144+
expect(controller, isNotNull);
145+
146+
await controller!.loadFlutterAsset('assets/index.html');
147+
148+
verify(mockWebViewPlatformController.loadFlutterAsset(
149+
'assets/index.html',
150+
));
151+
});
152+
153+
testWidgets('Load Flutter asset with empty key', (WidgetTester tester) async {
154+
WebViewController? controller;
155+
await tester.pumpWidget(
156+
WebView(
157+
onWebViewCreated: (WebViewController webViewController) {
158+
controller = webViewController;
159+
},
160+
),
161+
);
162+
163+
expect(controller, isNotNull);
164+
165+
expect(() => controller!.loadFlutterAsset(''), throwsAssertionError);
166+
});
167+
134168
testWidgets('Load HTML string without base URL', (WidgetTester tester) async {
135169
WebViewController? controller;
136170
await tester.pumpWidget(

0 commit comments

Comments
 (0)