From 8d4d5293e0eefef90cdeaee67bdbeb2b9c3af8ad Mon Sep 17 00:00:00 2001 From: tanay Date: Thu, 11 Feb 2021 12:48:34 -0500 Subject: [PATCH 1/3] Add the ability for iframe to switch url if HTML data changes --- lib/src/replaced_element.dart | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/src/replaced_element.dart b/lib/src/replaced_element.dart index 76a8db944c..7456b75cb3 100644 --- a/lib/src/replaced_element.dart +++ b/lib/src/replaced_element.dart @@ -90,6 +90,11 @@ class ImageContentElement extends ReplacedElement { } } +/// Create a webview controller and old src independent of [IframeContentElement] +/// to make sure it doesn't reset when the html string is updated +WebViewController controller; +String oldUrl; + /// [IframeContentElement is a [ReplacedElement] with web content. class IframeContentElement extends ReplacedElement { final String src; @@ -110,11 +115,18 @@ class IframeContentElement extends ReplacedElement { @override Widget toWidget(RenderContext context) { final sandboxMode = attributes["sandbox"]; + if (oldUrl != null && src != oldUrl && controller != null) { + controller.loadUrl(src); + } + oldUrl = src; return Container( width: width ?? (height ?? 150) * 2, height: height ?? (width ?? 300) / 2, child: WebView( initialUrl: src, + onWebViewCreated: (WebViewController webController) { + controller = webController; + }, javascriptMode: sandboxMode == null || sandboxMode == "allow-scripts" ? JavascriptMode.unrestricted : JavascriptMode.disabled, From 037429ef07dffb80cdfc117671e86ff0223d19d5 Mon Sep 17 00:00:00 2001 From: tanay Date: Thu, 11 Feb 2021 18:37:42 -0500 Subject: [PATCH 2/3] Support switching multiple iframes --- lib/src/replaced_element.dart | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/lib/src/replaced_element.dart b/lib/src/replaced_element.dart index 7456b75cb3..6d6a6f03fd 100644 --- a/lib/src/replaced_element.dart +++ b/lib/src/replaced_element.dart @@ -90,17 +90,13 @@ class ImageContentElement extends ReplacedElement { } } -/// Create a webview controller and old src independent of [IframeContentElement] -/// to make sure it doesn't reset when the html string is updated -WebViewController controller; -String oldUrl; - /// [IframeContentElement is a [ReplacedElement] with web content. class IframeContentElement extends ReplacedElement { final String src; final double width; final double height; final NavigationDelegate navigationDelegate; + final GlobalKey key = GlobalKey(); IframeContentElement({ String name, @@ -115,18 +111,12 @@ class IframeContentElement extends ReplacedElement { @override Widget toWidget(RenderContext context) { final sandboxMode = attributes["sandbox"]; - if (oldUrl != null && src != oldUrl && controller != null) { - controller.loadUrl(src); - } - oldUrl = src; return Container( width: width ?? (height ?? 150) * 2, height: height ?? (width ?? 300) / 2, child: WebView( initialUrl: src, - onWebViewCreated: (WebViewController webController) { - controller = webController; - }, + key: key, javascriptMode: sandboxMode == null || sandboxMode == "allow-scripts" ? JavascriptMode.unrestricted : JavascriptMode.disabled, From 5ee28d145929c0a27c5e560622a46552c3d2e396 Mon Sep 17 00:00:00 2001 From: tanay Date: Mon, 15 Feb 2021 19:13:55 -0500 Subject: [PATCH 3/3] Replace GlobalKey with UniqueKey --- lib/src/replaced_element.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/replaced_element.dart b/lib/src/replaced_element.dart index 6d6a6f03fd..47d4618c40 100644 --- a/lib/src/replaced_element.dart +++ b/lib/src/replaced_element.dart @@ -96,7 +96,7 @@ class IframeContentElement extends ReplacedElement { final double width; final double height; final NavigationDelegate navigationDelegate; - final GlobalKey key = GlobalKey(); + final UniqueKey key = UniqueKey(); IframeContentElement({ String name,