Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/webview_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.3.12

* Added a getTitle getter to WebViewController.

## 0.3.11+4

* Removed noisy log messages on iOS.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ public void onMethodCall(MethodCall methodCall, Result result) {
case "clearCache":
clearCache(result);
break;
case "getTitle":
getTitle(result);
break;
default:
result.notImplemented();
}
Expand Down Expand Up @@ -222,6 +225,10 @@ private void clearCache(Result result) {
result.success(null);
}

private void getTitle(Result result) {
result.success(webView.getTitle());
}

private void applySettings(Map<String, Object> settings) {
for (String key : settings.keySet()) {
switch (key) {
Expand Down
37 changes: 37 additions & 0 deletions packages/webview_flutter/example/test_driver/webview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,43 @@ void main() {
expect(isPaused, _webviewBool(false));
});
});

test('getTitle', () async {
final String getTitleTest = '''
<!DOCTYPE html><html>
<head><title>Some title</title>
</head>
<body>
</body>
</html>
''';
final String getTitleTestBase64 =
base64Encode(const Utf8Encoder().convert(getTitleTest));
final Completer<void> pageLoaded = Completer<void>();
final Completer<WebViewController> controllerCompleter =
Completer<WebViewController>();

await pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: WebView(
initialUrl: 'data:text/html;charset=utf-8;base64,$getTitleTestBase64',
onWebViewCreated: (WebViewController controller) {
controllerCompleter.complete(controller);
},
onPageFinished: (String url) {
pageLoaded.complete(null);
},
),
),
);

final WebViewController controller = await controllerCompleter.future;
await pageLoaded.future;

final String title = await controller.getTitle();
expect(title, 'Some title');
});
}

Future<void> pumpWidget(Widget widget) {
Expand Down
7 changes: 7 additions & 0 deletions packages/webview_flutter/ios/Classes/FlutterWebView.m
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
[self onRemoveJavaScriptChannels:call result:result];
} else if ([[call method] isEqualToString:@"clearCache"]) {
[self clearCache:result];
} else if ([[call method] isEqualToString:@"getTitle"]) {
[self onGetTitle:result];
} else {
result(FlutterMethodNotImplemented);
}
Expand Down Expand Up @@ -238,6 +240,11 @@ - (void)clearCache:(FlutterResult)result {
}
}

- (void)onGetTitle:(FlutterResult)result {
NSString* title = _webView.title;
result(title);
}

// Returns nil when successful, or an error message when one or more keys are unknown.
- (NSString*)applySettings:(NSDictionary<NSString*, id>*)settings {
NSMutableArray<NSString*>* unknownKeys = [[NSMutableArray alloc] init];
Expand Down
6 changes: 6 additions & 0 deletions packages/webview_flutter/lib/platform_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@ abstract class WebViewPlatformController {
throw UnimplementedError(
"WebView removeJavascriptChannels is not implemented on the current platform");
}

/// Returns the title of the currently loaded page.
Future<String> getTitle() {
throw UnimplementedError(
"WebView getTitle is not implemented on the current platform");
}
}

/// Settings for configuring a WebViewPlatform.
Expand Down
3 changes: 3 additions & 0 deletions packages/webview_flutter/lib/src/webview_method_channel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class MethodChannelWebViewPlatform implements WebViewPlatformController {
'removeJavascriptChannels', javascriptChannelNames.toList());
}

@override
Future<String> getTitle() => _channel.invokeMethod<String>("getTitle");

/// Method channel implementation for [WebViewPlatform.clearCookies].
static Future<bool> clearCookies() {
return _cookieManagerChannel
Expand Down
5 changes: 5 additions & 0 deletions packages/webview_flutter/lib/webview_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,11 @@ class WebViewController {
// ignore: strong_mode_implicit_dynamic_method
return _webViewPlatformController.evaluateJavascript(javascriptString);
}

/// Returns the title of the currently loaded page.
Future<String> getTitle() {
return _webViewPlatformController.getTitle();
}
}

/// Manages cookies pertaining to all [WebView]s.
Expand Down
2 changes: 1 addition & 1 deletion packages/webview_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
version: 0.3.11+4
version: 0.3.12
author: Flutter Team <flutter-dev@googlegroups.com>
homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter

Expand Down