diff --git a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
index 3379bafa2346..5fe0af1f9a7a 100644
--- a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
@@ -8,6 +8,7 @@ import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -162,91 +163,30 @@ void main() {
}, skip: Platform.isAndroid && _skipDueToIssue86757);
testWidgets('resize webview', (WidgetTester tester) async {
- final String resizeTest = '''
-
-
Resize test
-
-
-
-
-
- ''';
- final String resizeTestBase64 =
- base64Encode(const Utf8Encoder().convert(resizeTest));
- final Completer resizeCompleter = Completer();
- final Completer pageStarted = Completer();
- final Completer pageLoaded = Completer();
- final Completer controllerCompleter =
- Completer();
- final GlobalKey key = GlobalKey();
-
- final WebView webView = WebView(
- key: key,
- initialUrl: 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
- onWebViewCreated: (WebViewController controller) {
- controllerCompleter.complete(controller);
+ final Completer initialResizeCompleter = Completer();
+ final Completer buttonTapResizeCompleter = Completer();
+ final Completer onPageFinished = Completer();
+
+ bool resizeButtonTapped = false;
+ await tester.pumpWidget(ResizableWebView(
+ onResize: (_) {
+ if (resizeButtonTapped) {
+ buttonTapResizeCompleter.complete();
+ } else {
+ initialResizeCompleter.complete();
+ }
},
- javascriptChannels: {
- JavascriptChannel(
- name: 'Resize',
- onMessageReceived: (JavascriptMessage message) {
- resizeCompleter.complete(true);
- },
- ),
- },
- onPageStarted: (String url) {
- pageStarted.complete(null);
- },
- onPageFinished: (String url) {
- pageLoaded.complete(null);
- },
- javascriptMode: JavascriptMode.unrestricted,
- );
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 200,
- height: 200,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await controllerCompleter.future;
- await pageStarted.future;
- await pageLoaded.future;
-
- expect(resizeCompleter.isCompleted, false);
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 400,
- height: 400,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await resizeCompleter.future;
+ onPageFinished: () => onPageFinished.complete(),
+ ));
+ await onPageFinished.future;
+ if (Platform.isAndroid) {
+ await initialResizeCompleter.future;
+ }
+
+ resizeButtonTapped = true;
+ await tester.tap(find.byKey(const ValueKey('resizeButton')));
+ await tester.pumpAndSettle();
+ expect(buttonTapResizeCompleter.future, completes);
});
testWidgets('set custom userAgent', (WidgetTester tester) async {
@@ -1471,3 +1411,74 @@ Future _evaluateJavascript(
}
return jsonDecode(await controller.evaluateJavascript(js));
}
+
+class ResizableWebView extends StatefulWidget {
+ ResizableWebView({required this.onResize, required this.onPageFinished});
+
+ final JavascriptMessageHandler onResize;
+ final VoidCallback onPageFinished;
+
+ @override
+ State createState() => ResizableWebViewState();
+}
+
+class ResizableWebViewState extends State {
+ double webViewWidth = 200;
+ double webViewHeight = 200;
+
+ static const String resizePage = '''
+
+ Resize test
+
+
+
+
+
+ ''';
+
+ @override
+ Widget build(BuildContext context) {
+ final String resizeTestBase64 =
+ base64Encode(const Utf8Encoder().convert(resizePage));
+ return Directionality(
+ textDirection: TextDirection.ltr,
+ child: Column(
+ children: [
+ SizedBox(
+ width: webViewWidth,
+ height: webViewHeight,
+ child: WebView(
+ initialUrl:
+ 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
+ javascriptChannels: {
+ JavascriptChannel(
+ name: 'Resize',
+ onMessageReceived: widget.onResize,
+ ),
+ },
+ onPageFinished: (_) => widget.onPageFinished(),
+ javascriptMode: JavascriptMode.unrestricted,
+ ),
+ ),
+ TextButton(
+ key: Key('resizeButton'),
+ onPressed: () {
+ setState(() {
+ webViewWidth += 100.0;
+ webViewHeight += 100.0;
+ });
+ },
+ child: Text('ResizeButton'),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
index 8e3dcb458ee8..454e2c959680 100644
--- a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
@@ -185,91 +185,29 @@ void main() {
}, skip: _skipDueToIssue86757);
testWidgets('resize webview', (WidgetTester tester) async {
- final String resizeTest = '''
-
- Resize test
-
-
-
-
-
- ''';
- final String resizeTestBase64 =
- base64Encode(const Utf8Encoder().convert(resizeTest));
- final Completer resizeCompleter = Completer();
- final Completer pageStarted = Completer();
- final Completer pageLoaded = Completer();
- final Completer controllerCompleter =
- Completer();
- final GlobalKey key = GlobalKey();
-
- final WebView webView = WebView(
- key: key,
- initialUrl: 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
- onWebViewCreated: (WebViewController controller) {
- controllerCompleter.complete(controller);
+ final Completer initialResizeCompleter = Completer();
+ final Completer buttonTapResizeCompleter = Completer();
+ final Completer onPageFinished = Completer();
+
+ bool resizeButtonTapped = false;
+ await tester.pumpWidget(ResizableWebView(
+ onResize: (_) {
+ print(resizeButtonTapped);
+ if (resizeButtonTapped) {
+ buttonTapResizeCompleter.complete();
+ } else {
+ initialResizeCompleter.complete();
+ }
},
- javascriptChannels: {
- JavascriptChannel(
- name: 'Resize',
- onMessageReceived: (JavascriptMessage message) {
- resizeCompleter.complete(true);
- },
- ),
- },
- onPageStarted: (String url) {
- pageStarted.complete(null);
- },
- onPageFinished: (String url) {
- pageLoaded.complete(null);
- },
- javascriptMode: JavascriptMode.unrestricted,
- );
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 200,
- height: 200,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await controllerCompleter.future;
- await pageStarted.future;
- await pageLoaded.future;
-
- expect(resizeCompleter.isCompleted, false);
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 400,
- height: 400,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await resizeCompleter.future;
+ onPageFinished: () => onPageFinished.complete(),
+ ));
+ await onPageFinished.future;
+ await initialResizeCompleter.future;
+
+ resizeButtonTapped = true;
+ await tester.tap(find.byKey(const ValueKey('resizeButton')));
+ await tester.pumpAndSettle();
+ expect(buttonTapResizeCompleter.future, completes);
});
testWidgets('set custom userAgent', (WidgetTester tester) async {
@@ -1440,3 +1378,74 @@ Future _runJavaScriptReturningResult(
WebViewController controller, String js) async {
return jsonDecode(await controller.runJavascriptReturningResult(js));
}
+
+class ResizableWebView extends StatefulWidget {
+ ResizableWebView({required this.onResize, required this.onPageFinished});
+
+ final JavascriptMessageHandler onResize;
+ final VoidCallback onPageFinished;
+
+ @override
+ State createState() => ResizableWebViewState();
+}
+
+class ResizableWebViewState extends State {
+ double webViewWidth = 200;
+ double webViewHeight = 200;
+
+ static const String resizePage = '''
+
+ Resize test
+
+
+
+
+
+ ''';
+
+ @override
+ Widget build(BuildContext context) {
+ final String resizeTestBase64 =
+ base64Encode(const Utf8Encoder().convert(resizePage));
+ return Directionality(
+ textDirection: TextDirection.ltr,
+ child: Column(
+ children: [
+ SizedBox(
+ width: webViewWidth,
+ height: webViewHeight,
+ child: WebView(
+ initialUrl:
+ 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
+ javascriptChannels: {
+ JavascriptChannel(
+ name: 'Resize',
+ onMessageReceived: widget.onResize,
+ ),
+ },
+ onPageFinished: (_) => widget.onPageFinished(),
+ javascriptMode: JavascriptMode.unrestricted,
+ ),
+ ),
+ TextButton(
+ key: Key('resizeButton'),
+ onPressed: () {
+ setState(() {
+ webViewWidth += 100.0;
+ webViewHeight += 100.0;
+ });
+ },
+ child: Text('ResizeButton'),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
index 17e896c94888..a637da13ddc0 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
@@ -8,6 +8,7 @@ import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -180,91 +181,24 @@ void main() {
});
testWidgets('resize webview', (WidgetTester tester) async {
- final String resizeTest = '''
-
- Resize test
-
-
-
-
-
- ''';
- final String resizeTestBase64 =
- base64Encode(const Utf8Encoder().convert(resizeTest));
- final Completer resizeCompleter = Completer();
- final Completer pageStarted = Completer();
- final Completer pageLoaded = Completer();
- final Completer controllerCompleter =
- Completer();
- final GlobalKey key = GlobalKey();
-
- final WebView webView = WebView(
- key: key,
- initialUrl: 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
- onWebViewCreated: (WebViewController controller) {
- controllerCompleter.complete(controller);
+ final Completer buttonTapResizeCompleter = Completer();
+ final Completer onPageFinished = Completer();
+
+ bool resizeButtonTapped = false;
+ await tester.pumpWidget(ResizableWebView(
+ onResize: (_) {
+ if (resizeButtonTapped) {
+ buttonTapResizeCompleter.complete();
+ }
},
- javascriptChannels: {
- JavascriptChannel(
- name: 'Resize',
- onMessageReceived: (JavascriptMessage message) {
- resizeCompleter.complete(true);
- },
- ),
- },
- onPageStarted: (String url) {
- pageStarted.complete(null);
- },
- onPageFinished: (String url) {
- pageLoaded.complete(null);
- },
- javascriptMode: JavascriptMode.unrestricted,
- );
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 200,
- height: 200,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await controllerCompleter.future;
- await pageStarted.future;
- await pageLoaded.future;
-
- expect(resizeCompleter.isCompleted, false);
-
- await tester.pumpWidget(
- Directionality(
- textDirection: TextDirection.ltr,
- child: Column(
- children: [
- SizedBox(
- width: 400,
- height: 400,
- child: webView,
- ),
- ],
- ),
- ),
- );
-
- await resizeCompleter.future;
+ onPageFinished: () => onPageFinished.complete(),
+ ));
+ await onPageFinished.future;
+
+ resizeButtonTapped = true;
+ await tester.tap(find.byKey(const ValueKey('resizeButton')));
+ await tester.pumpAndSettle();
+ expect(buttonTapResizeCompleter.future, completes);
});
testWidgets('set custom userAgent', (WidgetTester tester) async {
@@ -1235,3 +1169,74 @@ Future _runJavascriptReturningResult(
}
return jsonDecode(await controller.runJavascriptReturningResult(js));
}
+
+class ResizableWebView extends StatefulWidget {
+ ResizableWebView({required this.onResize, required this.onPageFinished});
+
+ final JavascriptMessageHandler onResize;
+ final VoidCallback onPageFinished;
+
+ @override
+ State createState() => ResizableWebViewState();
+}
+
+class ResizableWebViewState extends State {
+ double webViewWidth = 200;
+ double webViewHeight = 200;
+
+ static const String resizePage = '''
+
+ Resize test
+
+
+
+
+
+ ''';
+
+ @override
+ Widget build(BuildContext context) {
+ final String resizeTestBase64 =
+ base64Encode(const Utf8Encoder().convert(resizePage));
+ return Directionality(
+ textDirection: TextDirection.ltr,
+ child: Column(
+ children: [
+ SizedBox(
+ width: webViewWidth,
+ height: webViewHeight,
+ child: WebView(
+ initialUrl:
+ 'data:text/html;charset=utf-8;base64,$resizeTestBase64',
+ javascriptChannels: {
+ JavascriptChannel(
+ name: 'Resize',
+ onMessageReceived: widget.onResize,
+ ),
+ },
+ onPageFinished: (_) => widget.onPageFinished(),
+ javascriptMode: JavascriptMode.unrestricted,
+ ),
+ ),
+ TextButton(
+ key: Key('resizeButton'),
+ onPressed: () {
+ setState(() {
+ webViewWidth += 100.0;
+ webViewHeight += 100.0;
+ });
+ },
+ child: Text('ResizeButton'),
+ ),
+ ],
+ ),
+ );
+ }
+}