Skip to content

[webview_flutter_android][webview_flutter_wkwebview] Fixes bug where PlatformWebViewWidget doesn't rebuild when the controller changes - #4533

Merged
auto-submit[bot] merged 6 commits into
flutter:mainfrom
bparrishMines:widget_fix
Jul 25, 2023
Merged

Conversation

@bparrishMines

@bparrishMinesbparrishMines commented Jul 20, 2023

Copy link
Copy Markdown
Contributor

In a scenario where a WebViewWidget was updated with a new WebViewController, the native WebView from the new controller would not be shown. e.g.

 class WebViewExample extends StatefulWidget {
const WebViewExample({super.key});
@override
State<WebViewExample> createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
late WebViewController controller;
@override
void initState() {
super.initState();
controller = WebViewController()
..loadRequest(Uri.parse('https://flutter.dev'));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter Simple Example')),
body: WebViewWidget(controller: controller),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
controller = WebViewController()
..loadRequest(Uri.parse('https://google.com'));
});
},
child: const Icon(Icons.add),
),
);
}
} 

From testing, the WebViewWidget would continue showing the original WebViewController and eventually freeze the PlatformView preventing button presses.

This is because the PlatformView widget only creates the native PlatformView once and doesn't recreate it when the creation parameters change (as expected). This adds a default key to the PlatformWebViewWidget that is used to indicate when the underlying widget needs to be removed and recreated. See https://api.flutter.dev/flutter/widgets/Widget/key.html

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the relevant style guides and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/packages repo does use dart format.)
  • I signed the CLA.
  • The title of the PR starts with the name of the package surrounded by square brackets, e.g. [shared_preferences]
  • I listed at least one issue that this PR fixes in the description above.
  • I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is exempt from version changes.
  • I updated CHANGELOG.md to add a description of the change, following repository CHANGELOG style.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is test-exempt.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@bparrishMinesbparrishMines changed the title Fixes bug where where PlatformWebViewWidget doesn't rebuild when the …[webview_flutter_android][webview_flutter_wkwebview] Fixes bug where where PlatformWebViewWidget doesn't rebuild when the controller changesJul 20, 2023
@bparrishMinesbparrishMines changed the title [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where where PlatformWebViewWidget doesn't rebuild when the controller changes[webview_flutter_android][webview_flutter_wkwebview] Fixes bug where PlatformWebViewWidget doesn't rebuild when the controller changesJul 20, 2023
@bparrishMines
bparrishMines marked this pull request as ready for review July 21, 2023 02:59

@mvanbeusekommvanbeusekom left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@stuartmorgan-gstuartmorgan-g left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@bparrishMinesbparrishMines added autosubmit Merge PR when tree becomes green via auto submit App and removed autosubmit Merge PR when tree becomes green via auto submit App labels Jul 25, 2023
@bparrishMinesbparrishMines added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 25, 2023
@auto-submit
auto-submitBot merged commit 26889ce into flutter:mainJul 25, 2023
@bparrishMines
bparrishMines deleted the widget_fix branch July 25, 2023 14:33
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 25, 2023
…g where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 25, 2023
…g where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jul 25, 2023
…g where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
auto-submitBot pushed a commit to flutter/flutter that referenced this pull request Jul 25, 2023
flutter/packages@8028caf...406eac1
2023-07-25 engine-flutter-autoroll@skia.org Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 10687576+bparrishMines@users.noreply.github.com [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 stuartmorgan@google.com [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 rexios@rexios.dev [google_maps_flutter_web] Options to disable tilt controls and configure gesture handling (flutter/packages#3258)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com,rmistry@google.com on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
LouiseHsu pushed a commit to LouiseHsu/flutter that referenced this pull request Jul 31, 2023
flutter/packages@8028caf...406eac1
2023-07-25 engine-flutter-autoroll@skia.org Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 10687576+bparrishMines@users.noreply.github.com [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 stuartmorgan@google.com [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 rexios@rexios.dev [google_maps_flutter_web] Options to disable tilt controls and configure gesture handling (flutter/packages#3258)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com,rmistry@google.com on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
vashworth pushed a commit to vashworth/flutter that referenced this pull request Aug 2, 2023
flutter/packages@8028caf...406eac1
2023-07-25 engine-flutter-autoroll@skia.org Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 10687576+bparrishMines@users.noreply.github.com [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 stuartmorgan@google.com [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 rexios@rexios.dev [google_maps_flutter_web] Options to disable tilt controls and configure gesture handling (flutter/packages#3258)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com,rmistry@google.com on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
@reidbakerreidbaker mentioned this pull request Aug 4, 2023
11 tasks
auto-submitBot pushed a commit that referenced this pull request Aug 9, 2023
…uild bug caused by key type (#4667)
It looks like the wrong key was used in #4533. The `ObjectKey` uses `identical` for comparison while `ValueKey` uses `==`, which is what was intended. This just switches the key type on both platforms.
Fixesflutter/flutter#131697Fixesflutter/flutter#132143
Jyndigo pushed a commit to uesp/webview_flutter_x that referenced this pull request Jun 24, 2025
…uild bug caused by key type (#4667)
It looks like the wrong key was used in flutter/packages#4533. The `ObjectKey` uses `identical` for comparison while `ValueKey` uses `==`, which is what was intended. This just switches the key type on both platforms.
Fixesflutter/flutter#131697Fixesflutter/flutter#132143
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…`PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter#4533)
In a scenario where a `WebViewWidget` was updated with a new `WebViewController`, the native `WebView` from the new controller would not be shown. e.g.
```dart
class WebViewExample extends StatefulWidget {
const WebViewExample({super.key});
@OverRide
State<WebViewExample> createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
late WebViewController controller;
@OverRide
void initState() {
super.initState();
controller = WebViewController()
..loadRequest(Uri.parse('https://flutter.dev'));
}
@OverRide
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter Simple Example')),
body: WebViewWidget(controller: controller),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
controller = WebViewController()
..loadRequest(Uri.parse('https://google.com'));
});
},
child: const Icon(Icons.add),
),
);
}
} ```
From testing, the `WebViewWidget` would continue showing the original `WebViewController` and eventually freeze the PlatformView preventing button presses. This is because the PlatformView widget only creates the native PlatformView once and doesn't recreate it when the creation parameters change (as expected). This adds a default `key` to the `PlatformWebViewWidget` that is used to indicate when the underlying widget needs to be removed and recreated. See https://api.flutter.dev/flutter/widgets/Widget/key.html
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…uild bug caused by key type (flutter#4667)
It looks like the wrong key was used in flutter#4533. The `ObjectKey` uses `identical` for comparison while `ValueKey` uses `==`, which is what was intended. This just switches the key type on both platforms.
Fixesflutter/flutter#131697Fixesflutter/flutter#132143
bisor0627 pushed a commit to bisor0627/packages that referenced this pull request Jun 19, 2026
…`PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter#4533)
In a scenario where a `WebViewWidget` was updated with a new `WebViewController`, the native `WebView` from the new controller would not be shown. e.g.
```dart
class WebViewExample extends StatefulWidget {
const WebViewExample({super.key});
@OverRide
State<WebViewExample> createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
late WebViewController controller;
@OverRide
void initState() {
super.initState();
controller = WebViewController()
..loadRequest(Uri.parse('https://flutter.dev'));
}
@OverRide
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter Simple Example')),
body: WebViewWidget(controller: controller),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
controller = WebViewController()
..loadRequest(Uri.parse('https://google.com'));
});
},
child: const Icon(Icons.add),
),
);
}
} ```
From testing, the `WebViewWidget` would continue showing the original `WebViewController` and eventually freeze the PlatformView preventing button presses. This is because the PlatformView widget only creates the native PlatformView once and doesn't recreate it when the creation parameters change (as expected). This adds a default `key` to the `PlatformWebViewWidget` that is used to indicate when the underlying widget needs to be removed and recreated. See https://api.flutter.dev/flutter/widgets/Widget/key.html
bisor0627 pushed a commit to bisor0627/packages that referenced this pull request Jun 19, 2026
…uild bug caused by key type (flutter#4667)
It looks like the wrong key was used in flutter#4533. The `ObjectKey` uses `identical` for comparison while `ValueKey` uses `==`, which is what was intended. This just switches the key type on both platforms.
Fixesflutter/flutter#131697Fixesflutter/flutter#132143
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmitMerge PR when tree becomes green via auto submit Appp: webview_flutterplatform-androidplatform-ios

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@bparrishMines@stuartmorgan-g@mvanbeusekom