Update the controller's onPageFinished reference when the widget is
rebuilt.
diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md
index 92e2a10..813ab33 100644
--- a/packages/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.5+1
+
+* Fix a bug where updates to onPageFinished were ignored.
+
## 0.3.5
* Added an onPageFinished callback.
diff --git a/packages/webview_flutter/lib/webview_flutter.dart b/packages/webview_flutter/lib/webview_flutter.dart
index 96a626b..e172c61 100644
--- a/packages/webview_flutter/lib/webview_flutter.dart
+++ b/packages/webview_flutter/lib/webview_flutter.dart
@@ -272,6 +272,7 @@
controller._updateSettings(settings);
controller._updateJavascriptChannels(widget.javascriptChannels);
controller._navigationDelegate = widget.navigationDelegate;
+ controller._onPageFinished = widget.onPageFinished;
}
void _onPlatformViewCreated(int id) {
@@ -392,7 +393,7 @@
_WebSettings _settings;
- final PageFinishedCallback _onPageFinished;
+ PageFinishedCallback _onPageFinished;
// Maps a channel name to a channel.
Map<String, JavascriptChannel> _javascriptChannels =
diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml
index ccaecd3..e21da55 100644
--- a/packages/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/pubspec.yaml
@@ -1,6 +1,6 @@
name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
-version: 0.3.5
+version: 0.3.5+1
author: Flutter Team <flutter-dev@googlegroups.com>
homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter
diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart
index b1e45d5..d66f56d 100644
--- a/packages/webview_flutter/test/webview_flutter_test.dart
+++ b/packages/webview_flutter/test/webview_flutter_test.dart
@@ -608,6 +608,29 @@
// to test that it does not crash on a null callback.
platformWebView.fakeOnPageFinishedCallback();
});
+
+ testWidgets('onPageFinished changed', (WidgetTester tester) async {
+ String returnedUrl;
+
+ await tester.pumpWidget(WebView(
+ initialUrl: 'https://youtube.com',
+ onPageFinished: (String url) {},
+ ));
+
+ await tester.pumpWidget(WebView(
+ initialUrl: 'https://youtube.com',
+ onPageFinished: (String url) {
+ returnedUrl = url;
+ },
+ ));
+
+ final FakePlatformWebView platformWebView =
+ fakePlatformViewsController.lastCreatedView;
+
+ platformWebView.fakeOnPageFinishedCallback();
+
+ expect(platformWebView.currentUrl, returnedUrl);
+ });
});
group('navigationDelegate', () {