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

Commit 59eeaa8

Browse files
authored
[webview_flutter] Add a getTitle method to WebViewController (#1979)
Allows inspecting the title of the currently loaded page.
1 parent be0cfa3 commit 59eeaa8

File tree

8 files changed

+70
-1
lines changed

8 files changed

+70
-1
lines changed

packages/webview_flutter/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.3.12
2+
3+
* Added a getTitle getter to WebViewController.
4+
15
## 0.3.11+6
26

37
* Calling destroy on Android webview when flutter webview is getting disposed.

packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ public void onMethodCall(MethodCall methodCall, Result result) {
130130
case "clearCache":
131131
clearCache(result);
132132
break;
133+
case "getTitle":
134+
getTitle(result);
135+
break;
133136
default:
134137
result.notImplemented();
135138
}
@@ -222,6 +225,10 @@ private void clearCache(Result result) {
222225
result.success(null);
223226
}
224227

228+
private void getTitle(Result result) {
229+
result.success(webView.getTitle());
230+
}
231+
225232
private void applySettings(Map<String, Object> settings) {
226233
for (String key : settings.keySet()) {
227234
switch (key) {

packages/webview_flutter/example/test_driver/webview.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,43 @@ void main() {
369369
expect(isPaused, _webviewBool(false));
370370
});
371371
});
372+
373+
test('getTitle', () async {
374+
final String getTitleTest = '''
375+
<!DOCTYPE html><html>
376+
<head><title>Some title</title>
377+
</head>
378+
<body>
379+
</body>
380+
</html>
381+
''';
382+
final String getTitleTestBase64 =
383+
base64Encode(const Utf8Encoder().convert(getTitleTest));
384+
final Completer<void> pageLoaded = Completer<void>();
385+
final Completer<WebViewController> controllerCompleter =
386+
Completer<WebViewController>();
387+
388+
await pumpWidget(
389+
Directionality(
390+
textDirection: TextDirection.ltr,
391+
child: WebView(
392+
initialUrl: 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
393+
onWebViewCreated: (WebViewController controller) {
394+
controllerCompleter.complete(controller);
395+
},
396+
onPageFinished: (String url) {
397+
pageLoaded.complete(null);
398+
},
399+
),
400+
),
401+
);
402+
403+
final WebViewController controller = await controllerCompleter.future;
404+
await pageLoaded.future;
405+
406+
final String title = await controller.getTitle();
407+
expect(title, 'Some title');
408+
});
372409
}
373410

374411
Future<void> pumpWidget(Widget widget) {

packages/webview_flutter/ios/Classes/FlutterWebView.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
118118
[self onRemoveJavaScriptChannels:call result:result];
119119
} else if ([[call method] isEqualToString:@"clearCache"]) {
120120
[self clearCache:result];
121+
} else if ([[call method] isEqualToString:@"getTitle"]) {
122+
[self onGetTitle:result];
121123
} else {
122124
result(FlutterMethodNotImplemented);
123125
}
@@ -238,6 +240,11 @@ - (void)clearCache:(FlutterResult)result {
238240
}
239241
}
240242

243+
- (void)onGetTitle:(FlutterResult)result {
244+
NSString* title = _webView.title;
245+
result(title);
246+
}
247+
241248
// Returns nil when successful, or an error message when one or more keys are unknown.
242249
- (NSString*)applySettings:(NSDictionary<NSString*, id>*)settings {
243250
NSMutableArray<NSString*>* unknownKeys = [[NSMutableArray alloc] init];

packages/webview_flutter/lib/platform_interface.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,12 @@ abstract class WebViewPlatformController {
152152
throw UnimplementedError(
153153
"WebView removeJavascriptChannels is not implemented on the current platform");
154154
}
155+
156+
/// Returns the title of the currently loaded page.
157+
Future<String> getTitle() {
158+
throw UnimplementedError(
159+
"WebView getTitle is not implemented on the current platform");
160+
}
155161
}
156162

157163
/// Settings for configuring a WebViewPlatform.

packages/webview_flutter/lib/src/webview_method_channel.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ class MethodChannelWebViewPlatform implements WebViewPlatformController {
103103
'removeJavascriptChannels', javascriptChannelNames.toList());
104104
}
105105

106+
@override
107+
Future<String> getTitle() => _channel.invokeMethod<String>("getTitle");
108+
106109
/// Method channel implementation for [WebViewPlatform.clearCookies].
107110
static Future<bool> clearCookies() {
108111
return _cookieManagerChannel

packages/webview_flutter/lib/webview_flutter.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,11 @@ class WebViewController {
600600
// ignore: strong_mode_implicit_dynamic_method
601601
return _webViewPlatformController.evaluateJavascript(javascriptString);
602602
}
603+
604+
/// Returns the title of the currently loaded page.
605+
Future<String> getTitle() {
606+
return _webViewPlatformController.getTitle();
607+
}
603608
}
604609

605610
/// Manages cookies pertaining to all [WebView]s.

packages/webview_flutter/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: webview_flutter
22
description: A Flutter plugin that provides a WebView widget on Android and iOS.
3-
version: 0.3.11+6
3+
version: 0.3.12
44
author: Flutter Team <[email protected]>
55
homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter
66

0 commit comments

Comments
 (0)