Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 25, 2023

Conversation

bparrishMines
Copy link
Contributor

@bparrishMines bparrishMines commented Jul 20, 2023

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.

@bparrishMines bparrishMines 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 changes Jul 20, 2023
@bparrishMines bparrishMines 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 changes Jul 20, 2023
@bparrishMines bparrishMines marked this pull request as ready for review July 21, 2023 02:59
@bparrishMines bparrishMines requested a review from cyanglaz as a code owner July 21, 2023 02:59
Copy link
Contributor

@mvanbeusekom mvanbeusekom left a comment

Choose a reason for hiding this comment

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

LGTM

Copy link
Contributor

@stuartmorgan-g stuartmorgan-g left a comment

Choose a reason for hiding this comment

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

LGTM

@bparrishMines bparrishMines 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
@bparrishMines bparrishMines added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 25, 2023
@auto-submit auto-submit bot merged commit 26889ce into flutter:main Jul 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-submit bot pushed a commit to flutter/flutter that referenced this pull request Jul 25, 2023
flutter/packages@8028caf...406eac1

2023-07-25 [email protected] Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 [email protected] [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 [email protected] [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 [email protected] [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 [email protected],[email protected] 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 [email protected] Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 [email protected] [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 [email protected] [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 [email protected] [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 [email protected],[email protected] 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 [email protected] Roll Flutter from d7ed5dc to 9def8f6 (21 revisions) (flutter/packages#4561)
2023-07-25 [email protected] [webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (flutter/packages#4533)
2023-07-24 [email protected] [ci] Enable Android emulator-based tests (flutter/packages#4494)
2023-07-24 [email protected] [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 [email protected],[email protected] 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
auto-submit bot 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.

Fixes flutter/flutter#131697
Fixes flutter/flutter#132143
tony-hristov pushed a commit to tony-hristov/webview_flutter that referenced this pull request Sep 12, 2023
…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.

Fixes flutter/flutter#131697
Fixes flutter/flutter#132143
Jyndigo pushed a commit to uesp/wkwebview_flutter 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.

Fixes flutter/flutter#131697
Fixes flutter/flutter#132143
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App p: webview_flutter platform-android platform-ios
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants