diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index 7710f748fca5..313b29cda9fb 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.3.15+1 + +* Revert the prior embedding support add since it requires an API that hasn't + rolled to stable. + ## 0.3.15 * Add support for the v2 Android embedding. This shouldn't affect existing diff --git a/packages/webview_flutter/android/build.gradle b/packages/webview_flutter/android/build.gradle index 0104ede0a418..4fe7629b5f76 100644 --- a/packages/webview_flutter/android/build.gradle +++ b/packages/webview_flutter/android/build.gradle @@ -50,28 +50,3 @@ android { implementation 'androidx.webkit:webkit:1.0.0' } } - -// TODO(mklim): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348 -afterEvaluate { - def containsEmbeddingDependencies = false - for (def configuration : configurations.all) { - for (def dependency : configuration.dependencies) { - if (dependency.group == 'io.flutter' && - dependency.name.startsWith('flutter_embedding') && - dependency.isTransitive()) - { - containsEmbeddingDependencies = true - break - } - } - } - if (!containsEmbeddingDependencies) { - android { - dependencies { - def lifecycle_version = "2.1.0" - api "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - api "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" - } - } - } -} \ No newline at end of file diff --git a/packages/webview_flutter/android/gradle.properties b/packages/webview_flutter/android/gradle.properties index 08f2b5f91bff..8bd86f680510 100644 --- a/packages/webview_flutter/android/gradle.properties +++ b/packages/webview_flutter/android/gradle.properties @@ -1,3 +1 @@ org.gradle.jvmargs=-Xmx1536M -android.enableJetifier=true -android.useAndroidX=true diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterCookieManager.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterCookieManager.java index 86b4fd412a29..908f877fb922 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterCookieManager.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterCookieManager.java @@ -15,11 +15,17 @@ import io.flutter.plugin.common.MethodChannel.Result; class FlutterCookieManager implements MethodCallHandler { - private final MethodChannel methodChannel; - FlutterCookieManager(BinaryMessenger messenger) { - methodChannel = new MethodChannel(messenger, "plugins.flutter.io/cookie_manager"); - methodChannel.setMethodCallHandler(this); + private FlutterCookieManager() { + // Do not instantiate. + // This class should only be used in context of a BinaryMessenger. + // Use FlutterCookieManager#registerWith instead. + } + + static void registerWith(BinaryMessenger messenger) { + MethodChannel methodChannel = new MethodChannel(messenger, "plugins.flutter.io/cookie_manager"); + FlutterCookieManager cookieManager = new FlutterCookieManager(); + methodChannel.setMethodCallHandler(cookieManager); } @Override @@ -33,10 +39,6 @@ public void onMethodCall(MethodCall methodCall, Result result) { } } - void dispose() { - methodChannel.setMethodCallHandler(null); - } - private static void clearCookies(final Result result) { CookieManager cookieManager = CookieManager.getInstance(); final boolean hasCookies = cookieManager.hasCookies(); diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java index ac326ed7f27b..a7f2db308e15 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java @@ -12,8 +12,6 @@ import android.view.View; import android.webkit.WebStorage; import android.webkit.WebViewClient; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -38,7 +36,7 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { BinaryMessenger messenger, int id, Map params, - @Nullable View containerView) { + final View containerView) { DisplayListenerProxy displayListenerProxy = new DisplayListenerProxy(); DisplayManager displayManager = @@ -97,16 +95,6 @@ public void onInputConnectionLocked() { webView.lockInputConnection(); } - @Override - public void onFlutterViewAttached(@NonNull View flutterView) { - webView.setContainerView(flutterView); - } - - @Override - public void onFlutterViewDetached() { - webView.setContainerView(null); - } - @Override public void onMethodCall(MethodCall methodCall, Result result) { switch (methodCall.method) { diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/InputAwareWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/InputAwareWebView.java index e04d566bdc92..9275c380fb56 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/InputAwareWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/InputAwareWebView.java @@ -7,11 +7,9 @@ import static android.content.Context.INPUT_METHOD_SERVICE; import android.content.Context; -import android.util.Log; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.webkit.WebView; -import androidx.annotation.Nullable; /** * A WebView subclass that mirrors the same implementation hacks that the system WebView does in @@ -24,29 +22,16 @@ *

See also {@link ThreadedInputConnectionProxyAdapterView}. */ final class InputAwareWebView extends WebView { - private static final String TAG = "InputAwareWebView"; + private final View containerView; + private View threadedInputConnectionProxyView; private ThreadedInputConnectionProxyAdapterView proxyAdapterView; - private @Nullable View containerView; - InputAwareWebView(Context context, @Nullable View containerView) { + InputAwareWebView(Context context, View containerView) { super(context); this.containerView = containerView; } - void setContainerView(@Nullable View containerView) { - this.containerView = containerView; - - if (proxyAdapterView == null) { - return; - } - - Log.w(TAG, "The containerView has changed while the proxyAdapterView exists."); - if (containerView != null) { - setInputConnectionTarget(proxyAdapterView); - } - } - /** * Set our proxy adapter view to use its cached input connection instead of creating new ones. * @@ -96,12 +81,6 @@ public boolean checkInputConnectionProxy(final View view) { // This isn't a new ThreadedInputConnectionProxyView. Ignore it. return super.checkInputConnectionProxy(view); } - if (containerView == null) { - Log.e( - TAG, - "Can't create a proxy view because there's no container view. Text input may not work."); - return super.checkInputConnectionProxy(view); - } // We've never seen this before, so we make the assumption that this is WebView's // ThreadedInputConnectionProxyView. We are making the assumption that the only view that could @@ -141,10 +120,6 @@ private void resetInputConnection() { // No need to reset the InputConnection to the default thread if we've never changed it. return; } - if (containerView == null) { - Log.e(TAG, "Can't reset the input connection to the container view because there is none."); - return; - } setInputConnectionTarget(/*targetView=*/ containerView); } @@ -157,13 +132,6 @@ private void resetInputConnection() { * InputConnections should be created on. */ private void setInputConnectionTarget(final View targetView) { - if (containerView == null) { - Log.e( - TAG, - "Can't set the input connection target because there is no containerView to use as a handler."); - return; - } - targetView.requestFocus(); containerView.post( new Runnable() { diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java index fe62e3a35540..6fdc36fbe545 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java @@ -6,7 +6,6 @@ import android.content.Context; import android.view.View; -import androidx.annotation.Nullable; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.StandardMessageCodec; import io.flutter.plugin.platform.PlatformView; @@ -15,9 +14,9 @@ public final class WebViewFactory extends PlatformViewFactory { private final BinaryMessenger messenger; - private @Nullable final View containerView; + private final View containerView; - WebViewFactory(BinaryMessenger messenger, @Nullable View containerView) { + WebViewFactory(BinaryMessenger messenger, View containerView) { super(StandardMessageCodec.INSTANCE); this.messenger = messenger; this.containerView = containerView; diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java index 0284f20115f8..17177541222c 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java @@ -4,73 +4,17 @@ package io.flutter.plugins.webviewflutter; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.PluginRegistry.Registrar; -/** - * Java platform implementation of the webview_flutter plugin. - * - *

Register this in an add to app scenario to gracefully handle activity and context changes. - * - *

Call {@link #registerWith(Registrar)} to use the stable {@code io.flutter.plugin.common} - * package instead. - */ -public class WebViewFlutterPlugin implements FlutterPlugin { - - private @Nullable FlutterCookieManager flutterCookieManager; - - /** - * Add an instance of this to {@link io.flutter.embedding.engine.plugins.PluginRegistry} to - * register it. - * - *

THIS PLUGIN CODE PATH DEPENDS ON A NEWER VERSION OF FLUTTER THAN THE ONE DEFINED IN THE - * PUBSPEC.YAML. Text input will fail on some Android devices unless this is used with at least - * flutter/flutter@1d4d63ace1f801a022ea9ec737bf8c15395588b9. Use the V1 embedding with {@link - * #registerWith(Registrar)} to use this plugin with older Flutter versions. - * - *

Registration should eventually be handled automatically by v2 of the - * GeneratedPluginRegistrant. https://github.com/flutter/flutter/issues/42694 - */ - public WebViewFlutterPlugin() {} - - /** - * Registers a plugin implementation that uses the stable {@code io.flutter.plugin.common} - * package. - * - *

Calling this automatically initializes the plugin. However plugins initialized this way - * won't react to changes in activity or context, unlike {@link CameraPlugin}. - */ +/** WebViewFlutterPlugin */ +public class WebViewFlutterPlugin { + /** Plugin registration. */ public static void registerWith(Registrar registrar) { registrar .platformViewRegistry() .registerViewFactory( "plugins.flutter.io/webview", new WebViewFactory(registrar.messenger(), registrar.view())); - new FlutterCookieManager(registrar.messenger()); - } - - @Override - public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - BinaryMessenger messenger = binding.getFlutterEngine().getDartExecutor(); - binding - .getFlutterEngine() - .getPlatformViewsController() - .getRegistry() - .registerViewFactory( - "plugins.flutter.io/webview", new WebViewFactory(messenger, /*containerView=*/ null)); - flutterCookieManager = new FlutterCookieManager(messenger); - } - - @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { - if (flutterCookieManager == null) { - return; - } - - flutterCookieManager.dispose(); - flutterCookieManager = null; + FlutterCookieManager.registerWith(registrar.messenger()); } } diff --git a/packages/webview_flutter/example/android/app/build.gradle b/packages/webview_flutter/example/android/app/build.gradle index 706d501c4060..79a69ac3e4d7 100644 --- a/packages/webview_flutter/example/android/app/build.gradle +++ b/packages/webview_flutter/example/android/app/build.gradle @@ -56,7 +56,6 @@ flutter { dependencies { testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } diff --git a/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1ActivityTest.java b/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1ActivityTest.java deleted file mode 100644 index fe10c6155e5a..000000000000 --- a/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1ActivityTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.flutter.plugins.webviewflutterexample; - -import androidx.test.rule.ActivityTestRule; -import dev.flutter.plugins.e2e.FlutterRunner; -import org.junit.Rule; -import org.junit.runner.RunWith; - -@RunWith(FlutterRunner.class) -public class EmbeddingV1ActivityTest { - @Rule - public ActivityTestRule rule = - new ActivityTestRule<>(EmbeddingV1Activity.class); -} diff --git a/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/MainActivityTest.java b/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/MainActivityTest.java deleted file mode 100644 index a0bd4fe1a7f5..000000000000 --- a/packages/webview_flutter/example/android/app/src/androidTestDebug/java/io/flutter/plugins/webviewflutterexample/MainActivityTest.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.flutter.plugins.webviewflutterexample; - -import androidx.test.rule.ActivityTestRule; -import dev.flutter.plugins.e2e.FlutterRunner; -import org.junit.Rule; -import org.junit.runner.RunWith; - -@RunWith(FlutterRunner.class) -public class MainActivityTest { - @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); -} diff --git a/packages/webview_flutter/example/android/app/src/main/AndroidManifest.xml b/packages/webview_flutter/example/android/app/src/main/AndroidManifest.xml index fd570acc8959..8fcbcd3908ba 100644 --- a/packages/webview_flutter/example/android/app/src/main/AndroidManifest.xml +++ b/packages/webview_flutter/example/android/app/src/main/AndroidManifest.xml @@ -1,48 +1,39 @@ + package="io.flutter.plugins.webviewflutterexample"> - - - - - - - - - - - - - + + - - + + + + + + + + + + + diff --git a/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1Activity.java b/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1Activity.java deleted file mode 100644 index 9b868934cc10..000000000000 --- a/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/EmbeddingV1Activity.java +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.webviewflutterexample; - -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; - -public class EmbeddingV1Activity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } -} diff --git a/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/MainActivity.java b/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/MainActivity.java index 2f3b7edd3d9f..f935d0030483 100644 --- a/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/MainActivity.java +++ b/packages/webview_flutter/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/MainActivity.java @@ -4,22 +4,14 @@ package io.flutter.plugins.webviewflutterexample; -import io.flutter.embedding.android.FlutterActivity; -import io.flutter.embedding.engine.FlutterEngine; -import io.flutter.plugins.webviewflutter.WebViewFlutterPlugin; +import android.os.Bundle; +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; -/** - * THIS PLUGIN CODE PATH DEPENDS ON A NEWER VERSION OF FLUTTER THAN THE ONE DEFINED IN THE - * PUBSPEC.YAML. Text input will fail on some Android devices unless this is used with at least - * flutter/flutter@1d4d63ace1f801a022ea9ec737bf8c15395588b9. - * - *

Use the V1 embedding as seen in {@link EmbeddingV1Activity} to use this plugin on older - * Flutter versions. - */ public class MainActivity extends FlutterActivity { - // TODO(mklim): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. https://github.com/flutter/flutter/issues/42694 @Override - public void configureFlutterEngine(FlutterEngine flutterEngine) { - flutterEngine.getPlugins().add(new WebViewFlutterPlugin()); + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); } } diff --git a/packages/webview_flutter/example/android/gradle.properties b/packages/webview_flutter/example/android/gradle.properties index a6738207fd15..ad8917e962e5 100644 --- a/packages/webview_flutter/example/android/gradle.properties +++ b/packages/webview_flutter/example/android/gradle.properties @@ -1,4 +1,2 @@ org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true -android.enableR8=true +android.useAndroidX=true \ No newline at end of file diff --git a/packages/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/example/pubspec.yaml index 0e24333cfc0b..3a73afaffa44 100644 --- a/packages/webview_flutter/example/pubspec.yaml +++ b/packages/webview_flutter/example/pubspec.yaml @@ -1,11 +1,10 @@ name: webview_flutter_example description: Demonstrates how to use the webview_flutter plugin. -version: 1.0.2 +version: 1.0.3 environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" - flutter: ">=1.9.1+hotfix.4 <2.0.0" dependencies: flutter: @@ -18,7 +17,6 @@ dev_dependencies: sdk: flutter flutter_driver: sdk: flutter - e2e: "^0.2.0" flutter: uses-material-design: true diff --git a/packages/webview_flutter/example/test_driver/webview_flutter_e2e.dart b/packages/webview_flutter/example/test_driver/webview.dart similarity index 92% rename from packages/webview_flutter/example/test_driver/webview_flutter_e2e.dart rename to packages/webview_flutter/example/test_driver/webview.dart index a5d4d7de66fe..e24afd73f557 100644 --- a/packages/webview_flutter/example/test_driver/webview_flutter_e2e.dart +++ b/packages/webview_flutter/example/test_driver/webview.dart @@ -9,17 +9,19 @@ import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; +import 'package:flutter_driver/driver_extension.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:webview_flutter/webview_flutter.dart'; -import 'package:e2e/e2e.dart'; void main() { - E2EWidgetsFlutterBinding.ensureInitialized(); + final Completer allTestsCompleter = Completer(); + enableFlutterDriverExtension(handler: (_) => allTestsCompleter.future); + tearDownAll(() => allTestsCompleter.complete(null)); - testWidgets('initalUrl', (WidgetTester tester) async { + test('initalUrl', () async { final Completer controllerCompleter = Completer(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -36,10 +38,10 @@ void main() { expect(currentUrl, 'https://flutter.dev/'); }); - testWidgets('loadUrl', (WidgetTester tester) async { + test('loadUrl', () async { final Completer controllerCompleter = Completer(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -59,11 +61,11 @@ void main() { // enable this once https://github.com/flutter/flutter/issues/31510 // is resolved. - testWidgets('loadUrl with headers', (WidgetTester tester) async { + test('loadUrl with headers', () async { final Completer controllerCompleter = Completer(); final StreamController pageLoads = StreamController(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -94,12 +96,12 @@ void main() { expect(content.contains('flutter_test_header'), isTrue); }); - testWidgets('JavaScriptChannel', (WidgetTester tester) async { + test('JavaScriptChannel', () async { final Completer controllerCompleter = Completer(); final Completer pageLoaded = Completer(); final List messagesReceived = []; - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -135,7 +137,7 @@ void main() { expect(messagesReceived, equals(['hello'])); }); - testWidgets('resize webview', (WidgetTester tester) async { + test('resize webview', () async { final String resizeTest = ''' Resize test @@ -182,7 +184,7 @@ void main() { javascriptMode: JavascriptMode.unrestricted, ); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: Column( @@ -202,7 +204,7 @@ void main() { expect(resizeCompleter.isCompleted, false); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: Column( @@ -220,11 +222,11 @@ void main() { await resizeCompleter.future; }); - testWidgets('set custom userAgent', (WidgetTester tester) async { + test('set custom userAgent', () async { final Completer controllerCompleter1 = Completer(); final GlobalKey _globalKey = GlobalKey(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -242,7 +244,7 @@ void main() { final String customUserAgent1 = await _getUserAgent(controller1); expect(customUserAgent1, 'Custom_User_Agent1'); // rebuild the WebView with a different user agent. - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -258,13 +260,12 @@ void main() { expect(customUserAgent2, 'Custom_User_Agent2'); }); - testWidgets('use default platform userAgent after webView is rebuilt', - (WidgetTester tester) async { + test('use default platform userAgent after webView is rebuilt', () async { final Completer controllerCompleter = Completer(); final GlobalKey _globalKey = GlobalKey(); // Build the webView with no user agent to get the default platform user agent. - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -280,7 +281,7 @@ void main() { final WebViewController controller = await controllerCompleter.future; final String defaultPlatformUserAgent = await _getUserAgent(controller); // rebuild the WebView with a custom user agent. - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -294,7 +295,7 @@ void main() { final String customUserAgent = await _getUserAgent(controller); expect(customUserAgent, 'Custom_User_Agent'); // rebuilds the WebView with no user agent. - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -340,12 +341,12 @@ void main() { audioTestBase64 = base64Encode(const Utf8Encoder().convert(audioTest)); }); - testWidgets('Auto media playback', (WidgetTester tester) async { + test('Auto media playback', () async { Completer controllerCompleter = Completer(); Completer pageLoaded = Completer(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -372,7 +373,7 @@ void main() { pageLoaded = Completer(); // We change the key to re-create a new webview as we change the initialMediaPlaybackPolicy - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -398,14 +399,13 @@ void main() { expect(isPaused, _webviewBool(true)); }); - testWidgets('Changes to initialMediaPlaybackPolocy are ignored', - (WidgetTester tester) async { + test('Changes to initialMediaPlaybackPolocy are ignored', () async { final Completer controllerCompleter = Completer(); Completer pageLoaded = Completer(); final GlobalKey key = GlobalKey(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -430,7 +430,7 @@ void main() { pageLoaded = Completer(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -458,7 +458,7 @@ void main() { }); }); - testWidgets('getTitle', (WidgetTester tester) async { + test('getTitle', () async { final String getTitleTest = ''' Some title @@ -473,7 +473,7 @@ void main() { final Completer controllerCompleter = Completer(); - await tester.pumpWidget( + await pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( @@ -496,6 +496,11 @@ void main() { }); } +Future pumpWidget(Widget widget) { + runApp(widget); + return WidgetsBinding.instance.endOfFrame; +} + // JavaScript booleans evaluate to different string values on Android and iOS. // This utility method returns the string boolean value of the current platform. String _webviewBool(bool value) { diff --git a/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart b/packages/webview_flutter/example/test_driver/webview_test.dart similarity index 72% rename from packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart rename to packages/webview_flutter/example/test_driver/webview_test.dart index 2e5c27fd402e..b0d3305cd652 100644 --- a/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart +++ b/packages/webview_flutter/example/test_driver/webview_test.dart @@ -3,14 +3,11 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:flutter_driver/flutter_driver.dart'; Future main() async { final FlutterDriver driver = await FlutterDriver.connect(); - final String result = - await driver.requestData(null, timeout: const Duration(minutes: 1)); + await driver.requestData(null, timeout: const Duration(minutes: 1)); driver.close(); - exit(result == 'pass' ? 0 : 1); } diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index efddfd3b7aec..cd8bfb5d4044 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -1,12 +1,12 @@ name: webview_flutter description: A Flutter plugin that provides a WebView widget on Android and iOS. -version: 0.3.15 +version: 0.3.15+1 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" - flutter: ">=1.6.7 <2.0.0" + flutter: ">=1.5.0 <2.0.0" dependencies: flutter: