diff --git a/flutter_inappwebview/example/integration_test/headless_in_app_webview/convert_to_inappwebview.dart b/flutter_inappwebview/example/integration_test/headless_in_app_webview/convert_to_inappwebview.dart index af88f38f42..17c853d0d8 100644 --- a/flutter_inappwebview/example/integration_test/headless_in_app_webview/convert_to_inappwebview.dart +++ b/flutter_inappwebview/example/integration_test/headless_in_app_webview/convert_to_inappwebview.dart @@ -26,6 +26,7 @@ void convertToInAppWebView() { expect(headlessWebView.isRunning(), true); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; final String? url = (await controller.getUrl())?.toString(); @@ -55,6 +56,7 @@ void convertToInAppWebView() { ); final InAppWebViewController widgetController = await widgetControllerCompleter.future; + await tester.pump(); expect(headlessWebView.isRunning(), false); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_content_height.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_content_height.dart index 1e1635fc9f..570e8eba89 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_content_height.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_content_height.dart @@ -33,9 +33,8 @@ void getContentHeight() { ); final InAppWebViewController controller = await controllerCompleter.future; - await pageLoaded.future; - await tester.pump(); + await pageLoaded.future; final contentHeight = await controller.getContentHeight(); expect(contentHeight, isNonZero); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_favicons.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_favicons.dart index d2ff44a21a..402e61b065 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_favicons.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_favicons.dart @@ -33,6 +33,7 @@ void getFavicons() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; final List? favicons = await controller.getFavicons(); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_html.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_html.dart index a6230478f5..bd405621db 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_html.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_html.dart @@ -33,6 +33,8 @@ void getHtml() { ); final InAppWebViewController controller = await controllerCompleter.future; + // Platform view creation happens asynchronously. + await tester.pump(); await pageLoaded.future; final String? html = await controller.getHtml(); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_tags.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_tags.dart index e30b703e8c..c6bc57394f 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_tags.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_tags.dart @@ -33,6 +33,7 @@ void getMetaTags() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; List metaTags = await controller.getMetaTags(); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_theme_color.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_theme_color.dart index 15f8fe863b..b3cfcbfa2b 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_theme_color.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_meta_theme_color.dart @@ -33,6 +33,7 @@ void getMetaThemeColor() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; expect(await controller.getMetaThemeColor(), isNotNull); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_original_url.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_original_url.dart index 635e95d913..182a4d1d44 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_original_url.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_original_url.dart @@ -33,6 +33,7 @@ void getOriginalUrl() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; var originUrl = (await controller.getOriginalUrl())?.toString(); expect(originUrl, url.toString()); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/get_title.dart b/flutter_inappwebview/example/integration_test/in_app_webview/get_title.dart index dcd4922447..78de31c0e1 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/get_title.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/get_title.dart @@ -50,6 +50,7 @@ void getTitle() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageStarted.future; await pageLoaded.future; diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/initial_url_request.dart b/flutter_inappwebview/example/integration_test/in_app_webview/initial_url_request.dart index 792467b3c4..bb93e4bbeb 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/initial_url_request.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/initial_url_request.dart @@ -80,6 +80,8 @@ void initialUrlRequest() { ), ), ); + // Platform view creation happens asynchronously. + await tester.pump(); await pageLoaded.future; final InAppWebViewController controller = diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/inject_css.dart b/flutter_inappwebview/example/integration_test/in_app_webview/inject_css.dart index cb55639412..108a0bdc20 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/inject_css.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/inject_css.dart @@ -35,6 +35,7 @@ void injectCSS() { final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.injectCSSCode(source: """ @@ -74,6 +75,7 @@ void injectCSS() { final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.injectCSSFileFromUrl( @@ -110,6 +112,7 @@ void injectCSS() { final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.injectCSSFileFromAsset( diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/inject_javascript_file.dart b/flutter_inappwebview/example/integration_test/in_app_webview/inject_javascript_file.dart index 1f60b5c022..b85c28790b 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/inject_javascript_file.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/inject_javascript_file.dart @@ -37,6 +37,7 @@ void injectJavascriptFile() { final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.injectJavascriptFileFromUrl( @@ -97,6 +98,7 @@ void injectJavascriptFile() { final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.injectJavascriptFileFromAsset( diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/is_secure_context.dart b/flutter_inappwebview/example/integration_test/in_app_webview/is_secure_context.dart index 3c5d8a6cc7..8457aff116 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/is_secure_context.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/is_secure_context.dart @@ -34,6 +34,7 @@ void isSecureContext() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoads.stream.first; expect(await controller.isSecureContext(), true); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/javascript_code_evaluation.dart b/flutter_inappwebview/example/integration_test/in_app_webview/javascript_code_evaluation.dart index 8f9a683f2f..4ac6f3a6f2 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/javascript_code_evaluation.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/javascript_code_evaluation.dart @@ -40,6 +40,7 @@ void javascriptCodeEvaluation() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; var result = await controller.evaluateJavascript(source: """ diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/load_data.dart b/flutter_inappwebview/example/integration_test/in_app_webview/load_data.dart index e5fb32ee93..4ada282aab 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/load_data.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/load_data.dart @@ -32,6 +32,8 @@ void loadData() { ); final InAppWebViewController controller = await controllerCompleter.future; + // do not wait for pump to not miss the load event + tester.pump(); await pageLoads.stream.first; final data = """ diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/load_file.dart b/flutter_inappwebview/example/integration_test/in_app_webview/load_file.dart index 09dbbcc85f..df857e5699 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/load_file.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/load_file.dart @@ -32,6 +32,8 @@ void loadFile() { ); final InAppWebViewController controller = await controllerCompleter.future; + // do not wait for pump to not miss the load event + tester.pump(); await pageLoads.stream.first; await controller.loadFile( diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/load_url.dart b/flutter_inappwebview/example/integration_test/in_app_webview/load_url.dart index bdb1f5beac..4fca151582 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/load_url.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/load_url.dart @@ -39,6 +39,7 @@ void loadUrl() { ), ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); expect(await firstUrlLoad.future, initialUrl.toString()); await controller.loadUrl( diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_console_message.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_console_message.dart index 495d12c4bb..a09ceb3ffc 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_console_message.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_console_message.dart @@ -33,7 +33,7 @@ void onConsoleMessage() { ), ), ); - + await tester.pump(); final ConsoleMessage consoleMessage = await onConsoleMessageCompleter.future; expect(consoleMessage.message, 'message'); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_scroll_changed.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_scroll_changed.dart index 6903cbc890..7d4fe106dd 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_scroll_changed.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_scroll_changed.dart @@ -38,9 +38,8 @@ void onScrollChanged() { ); final InAppWebViewController controller = await controllerCompleter.future; - await pageLoaded.future; - await tester.pump(); + await pageLoaded.future; controller.scrollTo(x: 0, y: 500); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_title_changed.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_title_changed.dart index d0f6fb5a2d..cbcd342a99 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_title_changed.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_title_changed.dart @@ -41,8 +41,8 @@ void onTitleChanged() { ); final InAppWebViewController controller = await controllerCompleter.future; - await pageLoaded.future; await tester.pump(); + await pageLoaded.future; await controller.evaluateJavascript( source: "document.title = 'title test';"); await expectLater(onTitleChangedCompleter.future, completes); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_update_visited_history.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_update_visited_history.dart index 9976e81e49..a43f1e4b9b 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_update_visited_history.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_update_visited_history.dart @@ -43,6 +43,7 @@ void onUpdateVisitedHistory() { ); final InAppWebViewController controller = await controllerCompleter.future; + await tester.pump(); await pageLoaded.future; await controller.evaluateJavascript(source: """ diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_window_blur.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_window_blur.dart index cb7b3282f9..0b1fe9c3db 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_window_blur.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_window_blur.dart @@ -29,6 +29,7 @@ void onWindowBlur() { ), ), ); + await tester.pump(); await expectLater(onWindowBlurCompleter.future, completes); }, skip: shouldSkip); } diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/on_window_focus.dart b/flutter_inappwebview/example/integration_test/in_app_webview/on_window_focus.dart index c07fe52823..ded782e106 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/on_window_focus.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/on_window_focus.dart @@ -29,6 +29,7 @@ void onWindowFocus() { ), ), ); + await tester.pump(); await expectLater(onWindowFocusCompleter.future, completes); }, skip: shouldSkip); } diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/print_current_page.dart b/flutter_inappwebview/example/integration_test/in_app_webview/print_current_page.dart index 13a11c0fd2..d38e206cba 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/print_current_page.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/print_current_page.dart @@ -33,8 +33,8 @@ void printCurrentPage() { ); final InAppWebViewController controller = await controllerCompleter.future; - await pageLoaded.future; await tester.pump(); + await pageLoaded.future; await expectLater(controller.printCurrentPage(), completes); }, skip: shouldSkip); } diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/programmatic_scroll.dart b/flutter_inappwebview/example/integration_test/in_app_webview/programmatic_scroll.dart index 640e7129d4..582c808afe 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/programmatic_scroll.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/programmatic_scroll.dart @@ -69,9 +69,8 @@ void programmaticScroll() { final InAppWebViewController controller = await controllerCompleter.future; - await pageLoaded.future; - await tester.pump(); + await pageLoaded.future; await controller.scrollTo(x: 0, y: 0); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/reload.dart b/flutter_inappwebview/example/integration_test/in_app_webview/reload.dart index 5cdb218dac..b01c7fa285 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/reload.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/reload.dart @@ -71,6 +71,8 @@ void reload() { ); final InAppWebViewController controller = await controllerCompleter.future; + // do not wait for pump to not miss the load event + tester.pump(); String? reloadUrl = await pageLoads.stream.first; expect(reloadUrl, url.toString()); diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/set_get_settings.dart b/flutter_inappwebview/example/integration_test/in_app_webview/set_get_settings.dart index 2c5a6d0faa..5bea368cac 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/set_get_settings.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/set_get_settings.dart @@ -32,6 +32,8 @@ void setGetSettings() { ), ), ); + // Platform view creation happens asynchronously. + await tester.pumpAndSettle(); final InAppWebViewController controller = await controllerCompleter.future; await pageLoaded.future; diff --git a/flutter_inappwebview/example/integration_test/in_app_webview/webview_windows.dart b/flutter_inappwebview/example/integration_test/in_app_webview/webview_windows.dart index 1db16a354e..cc6eb33386 100644 --- a/flutter_inappwebview/example/integration_test/in_app_webview/webview_windows.dart +++ b/flutter_inappwebview/example/integration_test/in_app_webview/webview_windows.dart @@ -49,7 +49,7 @@ void webViewWindows() { ), ), ); - + await tester.pump(); await expectLater(pageLoaded.future, completes); }, skip: shouldSkipTest1); diff --git a/flutter_inappwebview_web/lib/assets/web/web_support.js b/flutter_inappwebview_web/lib/assets/web/web_support.js index 031222d0b0..e3893d874f 100644 --- a/flutter_inappwebview_web/lib/assets/web/web_support.js +++ b/flutter_inappwebview_web/lib/assets/web/web_support.js @@ -1,6 +1,12 @@ window.flutter_inappwebview = { webViews: {}, - createFlutterInAppWebView: function(viewId, iframeId) { + /** + * @param viewId {number | string} + * @param iframe {HTMLIFrameElement} + * @param iframeContainer {HTMLDivElement} + */ + createFlutterInAppWebView: function(viewId, iframe, iframeContainer) { + const iframeId = iframe.id; var webView = { viewId: viewId, iframeId: iframeId, @@ -19,8 +25,6 @@ window.flutter_inappwebview = { }, prepare: function(settings) { webView.settings = settings; - var iframe = document.getElementById(iframeId); - var iframeContainer = document.getElementById(iframeId + '-container'); document.addEventListener('fullscreenchange', function(event) { // document.fullscreenElement will point to the element that diff --git a/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart b/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart index 22fd79f8fa..ff10fcdefa 100644 --- a/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart +++ b/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart @@ -60,7 +60,7 @@ class InAppWebViewWebElement implements Disposable { bridgeJsObject = js.JsObject.fromBrowserObject( js.context[WebPlatformManager.BRIDGE_JS_OBJECT_NAME]); bridgeJsObject['webViews'][_viewId] = bridgeJsObject - .callMethod("createFlutterInAppWebView", [_viewId, iframe.id]); + .callMethod("createFlutterInAppWebView", [_viewId, iframe, iframeContainer]); } /// Handles method calls over the MethodChannel of this plugin. @@ -203,7 +203,7 @@ class InAppWebViewWebElement implements Disposable { initialFile = webView.initialFile; bridgeJsObject['webViews'][_viewId] = bridgeJsObject - .callMethod("createFlutterInAppWebView", [_viewId, iframe.id]); + .callMethod("createFlutterInAppWebView", [_viewId, iframe, iframeContainer]); } } }