tree eb725082c85f88aadd27ecceb79c251ec75c26ab
parent 2481d92950890edbd1effa41bcd7fd3579d63dab
author Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> 1690295602 -0400
committer GitHub <noreply@github.com> 1690295602 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJkv90yCRBK7hj4Ov3rIwAAlvcIAFGiusWBTrznKqpLkZyv2BhJ
 mOkAsOdlEpUTnFQ0zMQtXsIDRpYskeUENPBH2Nv1X4tFFrNx9kckKYwZWCweUPiS
 Q9Waz7QqCrHGEBMZAiJg4GOAUCaqWVhOJd/qGDclLHIrT+JEaRIkV2rjGhPbc7lT
 xEWxyr/hBxgDPxXYuGv8GCbqqNERHggEgRcMRv9vSIHKk/0V3HGld57Q9MuMDiKB
 2R3T8ga6zwQ9QTzKp4z2FODJ/ASjpYPetY1ha+OB4hZJidC+Te2Z2xcXgmTuT/f4
 YuE6qHxY4AlQVXyOC+HdDgVWR/nD/YoVu49dNAM6Z3gXwd3/Fu+279fLdp0VNkg=
 =D3Sm
 -----END PGP SIGNATURE-----
 

[webview_flutter_android][webview_flutter_wkwebview] Fixes bug where `PlatformWebViewWidget` doesn't rebuild when the controller changes (#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