diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index b7050e4f4db3..a4be504f3035 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.0 + +* **Breaking Change**: Releases new interface. See [documentation](https://pub.dev/documentation/webview_flutter_platform_interface/2.0.0/) and [design doc](https://flutter.dev/go/webview_flutter_4_interface) + for more details. +* **Breaking Change**: Removes MethodChannel implementation of interface. All platform + implementations will now need to create their own by implementing `WebViewPlatform`. + ## 1.9.5 * Updates code for `no_leading_underscores_for_local_identifiers` lint. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/README.md b/packages/webview_flutter/webview_flutter_platform_interface/README.md index 31e57ab61597..10160b3cd132 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/README.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/README.md @@ -9,10 +9,10 @@ same interface. # Usage To implement a new platform-specific implementation of `webview_flutter`, extend -[`WebviewPlatform`](lib/src/platform_interface/webview_platform.dart) with an implementation that performs the +[`WebviewPlatform`](lib/src/webview_platform.dart) with an implementation that performs the platform-specific behavior, and when you register your plugin, set the default `WebviewPlatform` by calling -`WebviewPlatform.setInstance(MyPlatformWebview())`. +`WebviewPlatform.instance = MyPlatformWebview()`. # Note on breaking changes diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/javascript_channel_registry.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/javascript_channel_registry.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/javascript_channel_registry.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/javascript_channel_registry.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/platform_interface.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/platform_interface.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/platform_interface.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_cookie_manager.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_cookie_manager.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_callbacks_handler.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_callbacks_handler.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_callbacks_handler.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_callbacks_handler.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_controller.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_controller.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_controller.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/auto_media_playback_policy.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/auto_media_playback_policy.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/auto_media_playback_policy.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/auto_media_playback_policy.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_channel.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart new file mode 100644 index 000000000000..8d080452c54a --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart @@ -0,0 +1,14 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// A message that was sent by JavaScript code running in a [WebView]. +class JavascriptMessage { + /// Constructs a JavaScript message object. + /// + /// The `message` parameter must not be null. + const JavascriptMessage(this.message) : assert(message != null); + + /// The contents of the message that was sent by the JavaScript code. + final String message; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart similarity index 94% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart index bcbebff8bb1a..53d049175907 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. /// Describes the state of JavaScript support in a given web view. -enum JavaScriptMode { +enum JavascriptMode { /// JavaScript execution is disabled. disabled, diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart similarity index 51% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart index 05504fffd211..f2bcf19f42fd 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart @@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +export 'auto_media_playback_policy.dart'; +export 'creation_params.dart'; +export 'javascript_channel.dart'; export 'javascript_message.dart'; export 'javascript_mode.dart'; -export 'load_request_params.dart'; -export 'platform_navigation_delegate_creation_params.dart'; -export 'platform_webview_controller_creation_params.dart'; -export 'platform_webview_cookie_manager_creation_params.dart'; -export 'platform_webview_widget_creation_params.dart'; export 'web_resource_error.dart'; +export 'web_resource_error_type.dart'; +export 'web_settings.dart'; export 'webview_cookie.dart'; +export 'webview_request.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart new file mode 100644 index 000000000000..b61671f0ac45 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart @@ -0,0 +1,57 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'web_resource_error_type.dart'; + +/// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred. +class WebResourceError { + /// Creates a new [WebResourceError] + /// + /// A user should not need to instantiate this class, but will receive one in + /// [WebResourceErrorCallback]. + WebResourceError({ + required this.errorCode, + required this.description, + this.domain, + this.errorType, + this.failingUrl, + }) : assert(errorCode != null), + assert(description != null); + + /// Raw code of the error from the respective platform. + /// + /// On Android, the error code will be a constant from a + /// [WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient#summary) and + /// will have a corresponding [errorType]. + /// + /// On iOS, the error code will be a constant from `NSError.code` in + /// Objective-C. See + /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html + /// for more information on error handling on iOS. Some possible error codes + /// can be found at https://developer.apple.com/documentation/webkit/wkerrorcode?language=objc. + final int errorCode; + + /// The domain of where to find the error code. + /// + /// This field is only available on iOS and represents a "domain" from where + /// the [errorCode] is from. This value is taken directly from an `NSError` + /// in Objective-C. See + /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html + /// for more information on error handling on iOS. + final String? domain; + + /// Description of the error that can be used to communicate the problem to the user. + final String description; + + /// The type this error can be categorized as. + /// + /// This will never be `null` on Android, but can be `null` on iOS. + final WebResourceErrorType? errorType; + + /// Gets the URL for which the resource request was made. + /// + /// This value is not provided on iOS. Alternatively, you can keep track of + /// the last values provided to [WebViewPlatformController.loadUrl]. + final String? failingUrl; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error_type.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error_type.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error_type.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error_type.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_settings.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_settings.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart similarity index 63% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart index 7f56a312049f..406c510afd4b 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart @@ -2,18 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:flutter/foundation.dart'; - -/// A cookie that can be set globally for all web views using [WebViewCookieManagerPlatform]. -@immutable +/// A cookie that can be set globally for all web views +/// using [WebViewCookieManagerPlatform]. class WebViewCookie { - /// Creates a new [WebViewCookieDelegate] - const WebViewCookie({ - required this.name, - required this.value, - required this.domain, - this.path = '/', - }); + /// Constructs a new [WebViewCookie]. + const WebViewCookie( + {required this.name, + required this.value, + required this.domain, + this.path = '/'}); /// The cookie-name of the cookie. /// @@ -33,9 +30,20 @@ class WebViewCookie { /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String domain; - /// The path-value of the cookie, set to `/` by default. + /// The path-value of the cookie. + /// Is set to `/` in the constructor by default. /// /// Its value should match "path-value" in RFC6265bis: /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String path; + + /// Serializes the [WebViewCookie] to a Map. + Map toJson() { + return { + 'name': name, + 'value': value, + 'domain': domain, + 'path': path + }; + } } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_request.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_request.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_request.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart deleted file mode 100644 index 0e98ea08fd16..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart +++ /dev/null @@ -1,297 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:async'; - -import 'package:flutter/services.dart'; - -import '../platform_interface/platform_interface.dart'; -import '../types/types.dart'; - -/// A [WebViewPlatformController] that uses a method channel to control the webview. -class MethodChannelWebViewPlatform implements WebViewPlatformController { - /// Constructs an instance that will listen for webviews broadcasting to the - /// given [id], using the given [WebViewPlatformCallbacksHandler]. - MethodChannelWebViewPlatform( - int id, - this._platformCallbacksHandler, - this._javascriptChannelRegistry, - ) : assert(_platformCallbacksHandler != null), - _channel = MethodChannel('plugins.flutter.io/webview_$id') { - _channel.setMethodCallHandler(_onMethodCall); - } - - final JavascriptChannelRegistry _javascriptChannelRegistry; - - final WebViewPlatformCallbacksHandler _platformCallbacksHandler; - - final MethodChannel _channel; - - static const MethodChannel _cookieManagerChannel = - MethodChannel('plugins.flutter.io/cookie_manager'); - - Future _onMethodCall(MethodCall call) async { - switch (call.method) { - case 'javascriptChannelMessage': - final String channel = call.arguments['channel']! as String; - final String message = call.arguments['message']! as String; - _javascriptChannelRegistry.onJavascriptChannelMessage(channel, message); - return true; - case 'navigationRequest': - return await _platformCallbacksHandler.onNavigationRequest( - url: call.arguments['url']! as String, - isForMainFrame: call.arguments['isForMainFrame']! as bool, - ); - case 'onPageFinished': - _platformCallbacksHandler - .onPageFinished(call.arguments['url']! as String); - return null; - case 'onProgress': - _platformCallbacksHandler.onProgress(call.arguments['progress'] as int); - return null; - case 'onPageStarted': - _platformCallbacksHandler - .onPageStarted(call.arguments['url']! as String); - return null; - case 'onWebResourceError': - _platformCallbacksHandler.onWebResourceError( - WebResourceError( - errorCode: call.arguments['errorCode']! as int, - description: call.arguments['description']! as String, - // iOS doesn't support `failingUrl`. - failingUrl: call.arguments['failingUrl'] as String?, - domain: call.arguments['domain'] as String?, - errorType: call.arguments['errorType'] == null - ? null - : WebResourceErrorType.values.firstWhere( - (WebResourceErrorType type) { - return type.toString() == - '$WebResourceErrorType.${call.arguments['errorType']}'; - }, - ), - ), - ); - return null; - } - - throw MissingPluginException( - '${call.method} was invoked but has no handler', - ); - } - - @override - Future loadFile(String absoluteFilePath) async { - assert(absoluteFilePath != null); - - try { - return await _channel.invokeMethod('loadFile', absoluteFilePath); - } on PlatformException catch (ex) { - if (ex.code == 'loadFile_failed') { - throw ArgumentError(ex.message); - } - - rethrow; - } - } - - @override - Future loadFlutterAsset(String key) async { - assert(key.isNotEmpty); - - try { - return await _channel.invokeMethod('loadFlutterAsset', key); - } on PlatformException catch (ex) { - if (ex.code == 'loadFlutterAsset_invalidKey') { - throw ArgumentError(ex.message); - } - - rethrow; - } - } - - @override - Future loadHtmlString( - String html, { - String? baseUrl, - }) async { - assert(html != null); - return _channel.invokeMethod('loadHtmlString', { - 'html': html, - 'baseUrl': baseUrl, - }); - } - - @override - Future loadUrl( - String url, - Map? headers, - ) async { - assert(url != null); - return _channel.invokeMethod('loadUrl', { - 'url': url, - 'headers': headers, - }); - } - - @override - Future loadRequest(WebViewRequest request) async { - assert(request != null); - return _channel.invokeMethod('loadRequest', { - 'request': request.toJson(), - }); - } - - @override - Future currentUrl() => _channel.invokeMethod('currentUrl'); - - @override - Future canGoBack() => - _channel.invokeMethod('canGoBack').then((bool? result) => result!); - - @override - Future canGoForward() => _channel - .invokeMethod('canGoForward') - .then((bool? result) => result!); - - @override - Future goBack() => _channel.invokeMethod('goBack'); - - @override - Future goForward() => _channel.invokeMethod('goForward'); - - @override - Future reload() => _channel.invokeMethod('reload'); - - @override - Future clearCache() => _channel.invokeMethod('clearCache'); - - @override - Future updateSettings(WebSettings settings) async { - final Map updatesMap = _webSettingsToMap(settings); - if (updatesMap.isNotEmpty) { - await _channel.invokeMethod('updateSettings', updatesMap); - } - } - - @override - Future evaluateJavascript(String javascript) { - return _channel - .invokeMethod('evaluateJavascript', javascript) - .then((String? result) => result!); - } - - @override - Future runJavascript(String javascript) async { - await _channel.invokeMethod('runJavascript', javascript); - } - - @override - Future runJavascriptReturningResult(String javascript) { - return _channel - .invokeMethod('runJavascriptReturningResult', javascript) - .then((String? result) => result!); - } - - @override - Future addJavascriptChannels(Set javascriptChannelNames) { - return _channel.invokeMethod( - 'addJavascriptChannels', javascriptChannelNames.toList()); - } - - @override - Future removeJavascriptChannels(Set javascriptChannelNames) { - return _channel.invokeMethod( - 'removeJavascriptChannels', javascriptChannelNames.toList()); - } - - @override - Future getTitle() => _channel.invokeMethod('getTitle'); - - @override - Future scrollTo(int x, int y) { - return _channel.invokeMethod('scrollTo', { - 'x': x, - 'y': y, - }); - } - - @override - Future scrollBy(int x, int y) { - return _channel.invokeMethod('scrollBy', { - 'x': x, - 'y': y, - }); - } - - @override - Future getScrollX() => - _channel.invokeMethod('getScrollX').then((int? result) => result!); - - @override - Future getScrollY() => - _channel.invokeMethod('getScrollY').then((int? result) => result!); - - /// Method channel implementation for [WebViewPlatform.clearCookies]. - static Future clearCookies() { - return _cookieManagerChannel - .invokeMethod('clearCookies') - .then((dynamic result) => result! as bool); - } - - /// Method channel implementation for [WebViewPlatform.setCookie]. - static Future setCookie(WebViewCookie cookie) { - return _cookieManagerChannel.invokeMethod( - 'setCookie', cookie.toJson()); - } - - static Map _webSettingsToMap(WebSettings? settings) { - final Map map = {}; - void addIfNonNull(String key, dynamic value) { - if (value == null) { - return; - } - map[key] = value; - } - - void addSettingIfPresent(String key, WebSetting setting) { - if (!setting.isPresent) { - return; - } - map[key] = setting.value; - } - - addIfNonNull('jsMode', settings!.javascriptMode?.index); - addIfNonNull('hasNavigationDelegate', settings.hasNavigationDelegate); - addIfNonNull('hasProgressTracking', settings.hasProgressTracking); - addIfNonNull('debuggingEnabled', settings.debuggingEnabled); - addIfNonNull('gestureNavigationEnabled', settings.gestureNavigationEnabled); - addIfNonNull( - 'allowsInlineMediaPlayback', settings.allowsInlineMediaPlayback); - addSettingIfPresent('userAgent', settings.userAgent); - addIfNonNull('zoomEnabled', settings.zoomEnabled); - return map; - } - - /// Converts a [CreationParams] object to a map as expected by `platform_views` channel. - /// - /// This is used for the `creationParams` argument of the platform views created by - /// [AndroidWebViewBuilder] and [CupertinoWebViewBuilder]. - static Map creationParamsToMap( - CreationParams creationParams, { - bool usesHybridComposition = false, - }) { - return { - 'initialUrl': creationParams.initialUrl, - 'settings': _webSettingsToMap(creationParams.webSettings), - 'javascriptChannelNames': creationParams.javascriptChannelNames.toList(), - 'userAgent': creationParams.userAgent, - 'autoMediaPlaybackPolicy': creationParams.autoMediaPlaybackPolicy.index, - 'usesHybridComposition': usesHybridComposition, - 'backgroundColor': creationParams.backgroundColor?.value, - 'cookies': creationParams.cookies - .map((WebViewCookie cookie) => cookie.toJson()) - .toList() - }; - } -} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart similarity index 78% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart index a66f1defdf60..2df6cff73ab5 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart @@ -9,6 +9,19 @@ import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'webview_platform.dart'; +/// Signature for callbacks that report a pending navigation request. +typedef NavigationRequestCallback = FutureOr Function( + NavigationRequest navigationRequest); + +/// Signature for callbacks that report page events triggered by the native web view. +typedef PageEventCallback = void Function(String url); + +/// Signature for callbacks that report loading progress of a page. +typedef ProgressCallback = void Function(int progress); + +/// Signature for callbacks that report a resource loading error. +typedef WebResourceErrorCallback = void Function(WebResourceError error); + /// An interface defining navigation events that occur on the native platform. /// /// The [PlatformWebViewController] is notifying this delegate on events that @@ -40,8 +53,7 @@ abstract class PlatformNavigationDelegate extends PlatformInterface { /// /// See [PlatformWebViewController.setPlatformNavigationDelegate]. Future setOnNavigationRequest( - FutureOr Function({required String url, required bool isForMainFrame}) - onNavigationRequest, + NavigationRequestCallback onNavigationRequest, ) { throw UnimplementedError( 'setOnNavigationRequest is not implemented on the current platform.'); @@ -51,7 +63,7 @@ abstract class PlatformNavigationDelegate extends PlatformInterface { /// /// See [PlatformWebViewController.setPlatformNavigationDelegate]. Future setOnPageStarted( - void Function(String url) onPageStarted, + PageEventCallback onPageStarted, ) { throw UnimplementedError( 'setOnPageStarted is not implemented on the current platform.'); @@ -61,7 +73,7 @@ abstract class PlatformNavigationDelegate extends PlatformInterface { /// /// See [PlatformWebViewController.setPlatformNavigationDelegate]. Future setOnPageFinished( - void Function(String url) onPageFinished, + PageEventCallback onPageFinished, ) { throw UnimplementedError( 'setOnPageFinished is not implemented on the current platform.'); @@ -71,7 +83,7 @@ abstract class PlatformNavigationDelegate extends PlatformInterface { /// /// See [PlatformWebViewController.setPlatformNavigationDelegate]. Future setOnProgress( - void Function(int progress) onProgress, + ProgressCallback onProgress, ) { throw UnimplementedError( 'setOnProgress is not implemented on the current platform.'); @@ -81,7 +93,7 @@ abstract class PlatformNavigationDelegate extends PlatformInterface { /// /// See [PlatformWebViewController.setPlatformNavigationDelegate]. Future setOnWebResourceError( - void Function(WebResourceError error) onWebResourceError, + WebResourceErrorCallback onWebResourceError, ) { throw UnimplementedError( 'setOnWebResourceError is not implemented on the current platform.'); diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart similarity index 92% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart index 3585ec8b1886..7bb259c274b1 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart @@ -2,13 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:math'; -import 'dart:ui'; - import 'package:flutter/foundation.dart'; +import 'package:flutter/painting.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'platform_navigation_delegate.dart'; +import '../../src/platform_navigation_delegate.dart'; import 'webview_platform.dart'; /// Interface for a platform implementation of a web view controller. @@ -178,7 +176,7 @@ abstract class PlatformWebViewController extends PlatformInterface { /// The Future completes with an error if a JavaScript error occurred, or if the /// type the given expression evaluates to is unsupported. Unsupported values include /// certain non-primitive types on iOS, as well as `undefined` or `null` on iOS 14+. - Future runJavaScriptReturningResult(String javaScript) { + Future runJavaScriptReturningResult(String javaScript) { throw UnimplementedError( 'runJavaScriptReturningResult is not implemented on the current platform'); } @@ -226,24 +224,12 @@ abstract class PlatformWebViewController extends PlatformInterface { /// Return the current scroll position of this view. /// /// Scroll position is measured from the top left. - Future> getScrollPosition() { + Future getScrollPosition() { throw UnimplementedError( 'getScrollPosition is not implemented on the current platform'); } - /// Whether to enable the platform's webview content debugging tools. - Future enableDebugging(bool enabled) { - throw UnimplementedError( - 'enableDebugging is not implemented on the current platform'); - } - - /// Whether to allow swipe based navigation on supported platforms. - Future enableGestureNavigation(bool enabled) { - throw UnimplementedError( - 'enableGestureNavigation is not implemented on the current platform'); - } - - /// Whhether to support zooming using its on-screen zoom controls and gestures. + /// Whether to support zooming using its on-screen zoom controls and gestures. Future enableZoom(bool enabled) { throw UnimplementedError( 'enableZoom is not implemented on the current platform'); @@ -269,9 +255,10 @@ abstract class PlatformWebViewController extends PlatformInterface { } /// Describes the parameters necessary for registering a JavaScript channel. +@immutable class JavaScriptChannelParams { /// Creates a new [JavaScriptChannelParams] object. - JavaScriptChannelParams({ + const JavaScriptChannelParams({ required this.name, required this.onMessageReceived, }); diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_cookie_manager.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_widget.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_widget.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart index 8d080452c54a..b37661a045a9 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart @@ -2,12 +2,49 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart'; + /// A message that was sent by JavaScript code running in a [WebView]. -class JavascriptMessage { - /// Constructs a JavaScript message object. - /// - /// The `message` parameter must not be null. - const JavascriptMessage(this.message) : assert(message != null); +/// +/// Platform specific implementations can add additional fields by extending +/// this class and providing a factory method that takes the +/// [JavaScriptMessage] as a parameter. +/// +/// {@tool sample} +/// This example demonstrates how to extend the [JavaScriptMessage] to +/// provide additional platform specific parameters. +/// +/// When extending [JavaScriptMessage] additional parameters should always +/// accept `null` or have a default value to prevent breaking changes. +/// +/// ```dart +/// @immutable +/// class WKWebViewScriptMessage extends JavaScriptMessage { +/// WKWebViewScriptMessage._( +/// JavaScriptMessage javaScriptMessage, +/// this.extraData, +/// ) : super(javaScriptMessage.message); +/// +/// factory WKWebViewScriptMessage.fromJavaScripMessage( +/// JavaScriptMessage javaScripMessage, { +/// String? extraData, +/// }) { +/// return WKWebViewScriptMessage._( +/// javaScriptMessage, +/// extraData: extraData, +/// ); +/// } +/// +/// final String? extraData; +/// } +/// ``` +/// {@end-tool} +@immutable +class JavaScriptMessage { + /// Creates a new JavaScript message object. + const JavaScriptMessage({ + required this.message, + }); /// The contents of the message that was sent by the JavaScript code. final String message; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart index 53d049175907..bcbebff8bb1a 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. /// Describes the state of JavaScript support in a given web view. -enum JavascriptMode { +enum JavaScriptMode { /// JavaScript execution is disabled. disabled, diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart similarity index 94% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart index a0d1c8821798..ad934d6747b7 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart @@ -72,8 +72,8 @@ class LoadRequestParams { /// Used by the platform implementation to create a new [LoadRequestParams]. const LoadRequestParams({ required this.uri, - required this.method, - required this.headers, + this.method = LoadRequestMethod.get, + this.headers = const {}, this.body, }); @@ -81,6 +81,8 @@ class LoadRequestParams { final Uri uri; /// HTTP method used to make the request. + /// + /// Defaults to [LoadRequestMethod.get]. final LoadRequestMethod method; /// Headers for the request. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart new file mode 100644 index 000000000000..d8178acd8096 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart @@ -0,0 +1,12 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// A decision on how to handle a navigation request. +enum NavigationDecision { + /// Prevent the navigation from taking place. + prevent, + + /// Allow the navigation to take place. + navigate, +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart new file mode 100644 index 000000000000..ee3f1f910f9d --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart @@ -0,0 +1,18 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Defines the parameters of the pending navigation callback. +class NavigationRequest { + /// Creates a [NavigationRequest]. + const NavigationRequest({ + required this.url, + required this.isMainFrame, + }); + + /// The URL of the pending navigation request. + final String url; + + /// Indicates whether the request was made in the web site's main frame or a subframe. + final bool isMainFrame; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_navigation_delegate_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_navigation_delegate_creation_params.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_navigation_delegate_creation_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_navigation_delegate_creation_params.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_controller_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_controller_creation_params.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_controller_creation_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_controller_creation_params.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_cookie_manager_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_cookie_manager_creation_params.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_cookie_manager_creation_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_cookie_manager_creation_params.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_widget_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_widget_creation_params.dart similarity index 100% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_widget_creation_params.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_widget_creation_params.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart index f2bcf19f42fd..4df8800c83e1 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart @@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -export 'auto_media_playback_policy.dart'; -export 'creation_params.dart'; -export 'javascript_channel.dart'; export 'javascript_message.dart'; export 'javascript_mode.dart'; +export 'load_request_params.dart'; +export 'navigation_decision.dart'; +export 'navigation_request.dart'; +export 'platform_navigation_delegate_creation_params.dart'; +export 'platform_webview_controller_creation_params.dart'; +export 'platform_webview_cookie_manager_creation_params.dart'; +export 'platform_webview_widget_creation_params.dart'; export 'web_resource_error.dart'; -export 'web_resource_error_type.dart'; -export 'web_settings.dart'; export 'webview_cookie.dart'; -export 'webview_request.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart index b61671f0ac45..e2522da859f7 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart @@ -2,56 +2,122 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'web_resource_error_type.dart'; +import 'package:flutter/foundation.dart'; + +/// Possible error type categorizations used by [WebResourceError]. +enum WebResourceErrorType { + /// User authentication failed on server. + authentication, + + /// Malformed URL. + badUrl, + + /// Failed to connect to the server. + connect, + + /// Failed to perform SSL handshake. + failedSslHandshake, + + /// Generic file error. + file, + + /// File not found. + fileNotFound, + + /// Server or proxy hostname lookup failed. + hostLookup, + + /// Failed to read or write to the server. + io, + + /// User authentication failed on proxy. + proxyAuthentication, + + /// Too many redirects. + redirectLoop, + + /// Connection timed out. + timeout, + + /// Too many requests during this load. + tooManyRequests, + + /// Generic error. + unknown, + + /// Resource load was canceled by Safe Browsing. + unsafeResource, + + /// Unsupported authentication scheme (not basic or digest). + unsupportedAuthScheme, + + /// Unsupported URI scheme. + unsupportedScheme, + + /// The web content process was terminated. + webContentProcessTerminated, + + /// The web view was invalidated. + webViewInvalidated, + + /// A JavaScript exception occurred. + javaScriptExceptionOccurred, + + /// The result of JavaScript execution could not be returned. + javaScriptResultTypeIsUnsupported, +} /// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred. +/// +/// Platform specific implementations can add additional fields by extending +/// this class. +/// +/// {@tool sample} +/// This example demonstrates how to extend the [WebResourceError] to +/// provide additional platform specific parameters. +/// +/// When extending [WebResourceError] additional parameters should always +/// accept `null` or have a default value to prevent breaking changes. +/// +/// ```dart +/// class IOSWebResourceError extends WebResourceError { +/// IOSWebResourceError._(WebResourceError error, {required this.domain}) +/// : super( +/// errorCode: error.errorCode, +/// description: error.description, +/// errorType: error.errorType, +/// ); +/// +/// factory IOSWebResourceError.fromWebResourceError( +/// WebResourceError error, { +/// required String? domain, +/// }) { +/// return IOSWebResourceError._(error, domain: domain); +/// } +/// +/// final String? domain; +/// } +/// ``` +/// {@end-tool} +@immutable class WebResourceError { - /// Creates a new [WebResourceError] - /// - /// A user should not need to instantiate this class, but will receive one in - /// [WebResourceErrorCallback]. - WebResourceError({ + /// Used by the platform implementation to create a new [WebResourceError]. + const WebResourceError({ required this.errorCode, required this.description, - this.domain, this.errorType, - this.failingUrl, - }) : assert(errorCode != null), - assert(description != null); + this.isForMainFrame, + }); /// Raw code of the error from the respective platform. - /// - /// On Android, the error code will be a constant from a - /// [WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient#summary) and - /// will have a corresponding [errorType]. - /// - /// On iOS, the error code will be a constant from `NSError.code` in - /// Objective-C. See - /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html - /// for more information on error handling on iOS. Some possible error codes - /// can be found at https://developer.apple.com/documentation/webkit/wkerrorcode?language=objc. final int errorCode; - /// The domain of where to find the error code. - /// - /// This field is only available on iOS and represents a "domain" from where - /// the [errorCode] is from. This value is taken directly from an `NSError` - /// in Objective-C. See - /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html - /// for more information on error handling on iOS. - final String? domain; - /// Description of the error that can be used to communicate the problem to the user. final String description; /// The type this error can be categorized as. - /// - /// This will never be `null` on Android, but can be `null` on iOS. final WebResourceErrorType? errorType; - /// Gets the URL for which the resource request was made. - /// - /// This value is not provided on iOS. Alternatively, you can keep track of - /// the last values provided to [WebViewPlatformController.loadUrl]. - final String? failingUrl; + /// Whether the error originated from the main frame. + final bool? isForMainFrame; } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart index 406c510afd4b..7f56a312049f 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart @@ -2,15 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -/// A cookie that can be set globally for all web views -/// using [WebViewCookieManagerPlatform]. +import 'package:flutter/foundation.dart'; + +/// A cookie that can be set globally for all web views using [WebViewCookieManagerPlatform]. +@immutable class WebViewCookie { - /// Constructs a new [WebViewCookie]. - const WebViewCookie( - {required this.name, - required this.value, - required this.domain, - this.path = '/'}); + /// Creates a new [WebViewCookieDelegate] + const WebViewCookie({ + required this.name, + required this.value, + required this.domain, + this.path = '/', + }); /// The cookie-name of the cookie. /// @@ -30,20 +33,9 @@ class WebViewCookie { /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String domain; - /// The path-value of the cookie. - /// Is set to `/` in the constructor by default. + /// The path-value of the cookie, set to `/` by default. /// /// Its value should match "path-value" in RFC6265bis: /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1 final String path; - - /// Serializes the [WebViewCookie] to a Map. - Map toJson() { - return { - 'name': name, - 'value': value, - 'domain': domain, - 'path': path - }; - } } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart new file mode 100644 index 000000000000..1964e7089d2d --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart @@ -0,0 +1,6 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +export 'legacy/platform_interface/platform_interface.dart'; +export 'legacy/types/types.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart similarity index 98% rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart index c5c5dffc6a22..e91396243ea5 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart @@ -4,7 +4,7 @@ import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'platform_navigation_delegate.dart'; +import '../../src/platform_navigation_delegate.dart'; import 'platform_webview_controller.dart'; import 'platform_webview_cookie_manager.dart'; import 'platform_webview_widget.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart deleted file mode 100644 index b37661a045a9..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/foundation.dart'; - -/// A message that was sent by JavaScript code running in a [WebView]. -/// -/// Platform specific implementations can add additional fields by extending -/// this class and providing a factory method that takes the -/// [JavaScriptMessage] as a parameter. -/// -/// {@tool sample} -/// This example demonstrates how to extend the [JavaScriptMessage] to -/// provide additional platform specific parameters. -/// -/// When extending [JavaScriptMessage] additional parameters should always -/// accept `null` or have a default value to prevent breaking changes. -/// -/// ```dart -/// @immutable -/// class WKWebViewScriptMessage extends JavaScriptMessage { -/// WKWebViewScriptMessage._( -/// JavaScriptMessage javaScriptMessage, -/// this.extraData, -/// ) : super(javaScriptMessage.message); -/// -/// factory WKWebViewScriptMessage.fromJavaScripMessage( -/// JavaScriptMessage javaScripMessage, { -/// String? extraData, -/// }) { -/// return WKWebViewScriptMessage._( -/// javaScriptMessage, -/// extraData: extraData, -/// ); -/// } -/// -/// final String? extraData; -/// } -/// ``` -/// {@end-tool} -@immutable -class JavaScriptMessage { - /// Creates a new JavaScript message object. - const JavaScriptMessage({ - required this.message, - }); - - /// The contents of the message that was sent by the JavaScript code. - final String message; -} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart deleted file mode 100644 index 465799472912..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/foundation.dart'; - -/// Possible error type categorizations used by [WebResourceError]. -enum WebResourceErrorType { - /// User authentication failed on server. - authentication, - - /// Malformed URL. - badUrl, - - /// Failed to connect to the server. - connect, - - /// Failed to perform SSL handshake. - failedSslHandshake, - - /// Generic file error. - file, - - /// File not found. - fileNotFound, - - /// Server or proxy hostname lookup failed. - hostLookup, - - /// Failed to read or write to the server. - io, - - /// User authentication failed on proxy. - proxyAuthentication, - - /// Too many redirects. - redirectLoop, - - /// Connection timed out. - timeout, - - /// Too many requests during this load. - tooManyRequests, - - /// Generic error. - unknown, - - /// Resource load was canceled by Safe Browsing. - unsafeResource, - - /// Unsupported authentication scheme (not basic or digest). - unsupportedAuthScheme, - - /// Unsupported URI scheme. - unsupportedScheme, - - /// The web content process was terminated. - webContentProcessTerminated, - - /// The web view was invalidated. - webViewInvalidated, - - /// A JavaScript exception occurred. - javaScriptExceptionOccurred, - - /// The result of JavaScript execution could not be returned. - javaScriptResultTypeIsUnsupported, -} - -/// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred. -/// -/// Platform specific implementations can add additional fields by extending -/// this class. -/// -/// {@tool sample} -/// This example demonstrates how to extend the [WebResourceError] to -/// provide additional platform specific parameters. -/// -/// When extending [WebResourceError] additional parameters should always -/// accept `null` or have a default value to prevent breaking changes. -/// -/// ```dart -/// class IOSWebResourceError extends WebResourceError { -/// IOSWebResourceError._(WebResourceError error, {required this.domain}) -/// : super( -/// errorCode: error.errorCode, -/// description: error.description, -/// errorType: error.errorType, -/// ); -/// -/// factory IOSWebResourceError.fromWebResourceError( -/// WebResourceError error, { -/// required String? domain, -/// }) { -/// return IOSWebResourceError._(error, domain: domain); -/// } -/// -/// final String? domain; -/// } -/// ``` -/// {@end-tool} -@immutable -class WebResourceError { - /// Used by the platform implementation to create a new [WebResourceError]. - const WebResourceError({ - required this.errorCode, - required this.description, - this.errorType, - }); - - /// Raw code of the error from the respective platform. - final int errorCode; - - /// Description of the error that can be used to communicate the problem to the user. - final String description; - - /// The type this error can be categorized as. - final WebResourceErrorType? errorType; -} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart deleted file mode 100644 index d14fec163327..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -export 'src/platform_navigation_delegate.dart'; -export 'src/platform_webview_controller.dart'; -export 'src/platform_webview_cookie_manager.dart'; -export 'src/platform_webview_widget.dart'; -export 'src/types/types.dart'; -export 'src/webview_platform.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart index aa41c8285975..d14fec163327 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -export 'src/method_channel/webview_method_channel.dart'; -export 'src/platform_interface/platform_interface.dart'; +export 'src/platform_navigation_delegate.dart'; +export 'src/platform_webview_controller.dart'; +export 'src/platform_webview_cookie_manager.dart'; +export 'src/platform_webview_widget.dart'; export 'src/types/types.dart'; +export 'src/webview_platform.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 8f60592b852d..3ba7a567398e 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutte issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.9.5 +version: 2.0.0 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart similarity index 94% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart index aec568e92b79..c9d27c601985 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart @@ -3,8 +3,7 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:webview_flutter_platform_interface/src/platform_interface/javascript_channel_registry.dart'; -import 'package:webview_flutter_platform_interface/src/types/types.dart'; +import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; void main() { final Map log = {}; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart similarity index 81% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart index e0aae2146abc..a9faea52e407 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart @@ -3,8 +3,7 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:webview_flutter_platform_interface/src/platform_interface/platform_interface.dart'; -import 'package:webview_flutter_platform_interface/src/types/webview_cookie.dart'; +import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; void main() { WebViewCookieManagerPlatform? cookieManager; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart similarity index 93% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart index 8d7177150b7c..ecb9c3fbed10 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:webview_flutter_platform_interface/src/types/javascript_channel.dart'; +import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; void main() { final List validChars = diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart similarity index 87% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart index f058b8649b96..f1702f4ad1c0 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:webview_flutter_platform_interface/src/types/types.dart'; +import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; void main() { test('WebViewCookie should serialize correctly', () { diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart similarity index 93% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart index 6e1a4d7b4d56..fff1a9b19878 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart @@ -4,7 +4,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; -import 'package:webview_flutter_platform_interface/src/types/types.dart'; +import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; void main() { test('WebViewRequestMethod should serialize correctly', () { diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart similarity index 95% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart index dd4a26c4faf9..5e9aa2e12437 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart @@ -5,8 +5,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart'; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'webview_platform_test.mocks.dart'; @@ -61,7 +60,7 @@ void main() { expect( () => callbackDelegate.setOnNavigationRequest( - ({required bool isForMainFrame, required String url}) => true), + (NavigationRequest navigationRequest) => NavigationDecision.navigate), throwsUnimplementedError, ); }); diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart similarity index 92% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart index 32374fb04484..6710f34895b7 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart @@ -7,9 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart'; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'platform_navigation_delegate_test.dart'; import 'webview_platform_test.mocks.dart'; @@ -357,34 +355,6 @@ void main() { ); }); - test( - // ignore: lines_longer_than_80_chars - 'Default implementation of enableDebugging should throw unimplemented error', - () { - final PlatformWebViewController controller = - ExtendsPlatformWebViewController( - const PlatformWebViewControllerCreationParams()); - - expect( - () => controller.enableDebugging(true), - throwsUnimplementedError, - ); - }); - - test( - // ignore: lines_longer_than_80_chars - 'Default implementation of enableGestureNavigation should throw unimplemented error', - () { - final PlatformWebViewController controller = - ExtendsPlatformWebViewController( - const PlatformWebViewControllerCreationParams()); - - expect( - () => controller.enableGestureNavigation(true), - throwsUnimplementedError, - ); - }); - test( // ignore: lines_longer_than_80_chars 'Default implementation of enableZoom should throw unimplemented error', diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart new file mode 100644 index 000000000000..db142fe6a782 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart @@ -0,0 +1,106 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in webview_flutter_platform_interface/test/platform_webview_controller_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:webview_flutter_platform_interface/src/platform_navigation_delegate.dart' + as _i3; +import 'package:webview_flutter_platform_interface/src/webview_platform.dart' + as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePlatformNavigationDelegateCreationParams_0 extends _i1.SmartFake + implements _i2.PlatformNavigationDelegateCreationParams { + _FakePlatformNavigationDelegateCreationParams_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [PlatformNavigationDelegate]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockPlatformNavigationDelegate extends _i1.Mock + implements _i3.PlatformNavigationDelegate { + MockPlatformNavigationDelegate() { + _i1.throwOnMissingStub(this); + } + + @override + _i2.PlatformNavigationDelegateCreationParams get params => + (super.noSuchMethod( + Invocation.getter(#params), + returnValue: _FakePlatformNavigationDelegateCreationParams_0( + this, + Invocation.getter(#params), + ), + ) as _i2.PlatformNavigationDelegateCreationParams); + @override + _i4.Future setOnNavigationRequest( + _i3.NavigationRequestCallback? onNavigationRequest) => + (super.noSuchMethod( + Invocation.method( + #setOnNavigationRequest, + [onNavigationRequest], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + @override + _i4.Future setOnPageStarted(_i3.PageEventCallback? onPageStarted) => + (super.noSuchMethod( + Invocation.method( + #setOnPageStarted, + [onPageStarted], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + @override + _i4.Future setOnPageFinished(_i3.PageEventCallback? onPageFinished) => + (super.noSuchMethod( + Invocation.method( + #setOnPageFinished, + [onPageFinished], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + @override + _i4.Future setOnProgress(_i3.ProgressCallback? onProgress) => + (super.noSuchMethod( + Invocation.method( + #setOnProgress, + [onProgress], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + @override + _i4.Future setOnWebResourceError( + _i3.WebResourceErrorCallback? onWebResourceError) => + (super.noSuchMethod( + Invocation.method( + #setOnWebResourceError, + [onWebResourceError], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart similarity index 92% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart index ede16c162413..652f326cf20e 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart @@ -6,9 +6,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_widget.dart'; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'webview_platform_test.mocks.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart deleted file mode 100644 index ea9eb92452ba..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart +++ /dev/null @@ -1,746 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#106316) -// ignore: unnecessary_import -import 'dart:typed_data'; - -// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#106316) -// ignore: unnecessary_import -import 'package:flutter/cupertino.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; - -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - group('Tests on `plugin.flutter.io/webview_` channel', () { - const int channelId = 1; - const MethodChannel channel = - MethodChannel('plugins.flutter.io/webview_$channelId'); - final WebViewPlatformCallbacksHandler callbacksHandler = - MockWebViewPlatformCallbacksHandler(); - final JavascriptChannelRegistry javascriptChannelRegistry = - MockJavascriptChannelRegistry(); - - final List log = []; - channel.setMockMethodCallHandler((MethodCall methodCall) async { - log.add(methodCall); - - switch (methodCall.method) { - case 'currentUrl': - return 'https://test.url'; - case 'canGoBack': - case 'canGoForward': - return true; - case 'loadFile': - if (methodCall.arguments == 'invalid file') { - throw PlatformException( - code: 'loadFile_failed', message: 'Failed loading file.'); - } else if (methodCall.arguments == 'some error') { - throw PlatformException( - code: 'some_error', - message: 'Some error occurred.', - ); - } - return null; - case 'loadFlutterAsset': - if (methodCall.arguments == 'invalid key') { - throw PlatformException( - code: 'loadFlutterAsset_invalidKey', - message: 'Failed loading asset.', - ); - } else if (methodCall.arguments == 'some error') { - throw PlatformException( - code: 'some_error', - message: 'Some error occurred.', - ); - } - return null; - case 'runJavascriptReturningResult': - case 'evaluateJavascript': - return methodCall.arguments as String; - case 'getScrollX': - return 10; - case 'getScrollY': - return 20; - } - - // Return null explicitly instead of relying on the implicit null - // returned by the method channel if no return statement is specified. - return null; - }); - - final MethodChannelWebViewPlatform webViewPlatform = - MethodChannelWebViewPlatform( - channelId, - callbacksHandler, - javascriptChannelRegistry, - ); - - tearDown(() { - log.clear(); - }); - - test('loadFile', () async { - await webViewPlatform.loadFile( - '/folder/asset.html', - ); - - expect( - log, - [ - isMethodCall( - 'loadFile', - arguments: '/folder/asset.html', - ), - ], - ); - }); - - test('loadFile with invalid file', () async { - expect( - () => webViewPlatform.loadFile('invalid file'), - throwsA( - isA().having( - (ArgumentError error) => error.message, - 'message', - 'Failed loading file.', - ), - ), - ); - }); - - test('loadFile with some error.', () async { - expect( - () => webViewPlatform.loadFile('some error'), - throwsA( - isA().having( - (PlatformException error) => error.message, - 'message', - 'Some error occurred.', - ), - ), - ); - }); - - test('loadFlutterAsset', () async { - await webViewPlatform.loadFlutterAsset( - 'folder/asset.html', - ); - - expect( - log, - [ - isMethodCall( - 'loadFlutterAsset', - arguments: 'folder/asset.html', - ), - ], - ); - }); - - test('loadFlutterAsset with empty key', () async { - expect(() => webViewPlatform.loadFlutterAsset(''), throwsAssertionError); - }); - - test('loadFlutterAsset with invalid key', () async { - expect( - () => webViewPlatform.loadFlutterAsset('invalid key'), - throwsA( - isA().having( - (ArgumentError error) => error.message, - 'message', - 'Failed loading asset.', - ), - ), - ); - }); - - test('loadFlutterAsset with some error.', () async { - expect( - () => webViewPlatform.loadFlutterAsset('some error'), - throwsA( - isA().having( - (PlatformException error) => error.message, - 'message', - 'Some error occurred.', - ), - ), - ); - }); - - test('loadHtmlString without base URL', () async { - await webViewPlatform.loadHtmlString( - 'Test HTML string', - ); - - expect( - log, - [ - isMethodCall( - 'loadHtmlString', - arguments: { - 'html': 'Test HTML string', - 'baseUrl': null, - }, - ), - ], - ); - }); - - test('loadHtmlString without base URL', () async { - await webViewPlatform.loadHtmlString( - 'Test HTML string', - baseUrl: 'https://flutter.dev', - ); - - expect( - log, - [ - isMethodCall( - 'loadHtmlString', - arguments: { - 'html': 'Test HTML string', - 'baseUrl': 'https://flutter.dev', - }, - ), - ], - ); - }); - - test('loadUrl with headers', () async { - await webViewPlatform.loadUrl( - 'https://test.url', - const { - 'Content-Type': 'text/plain', - 'Accept': 'text/html', - }, - ); - - expect( - log, - [ - isMethodCall( - 'loadUrl', - arguments: { - 'url': 'https://test.url', - 'headers': { - 'Content-Type': 'text/plain', - 'Accept': 'text/html', - }, - }, - ), - ], - ); - }); - - test('loadUrl without headers', () async { - await webViewPlatform.loadUrl( - 'https://test.url', - null, - ); - - expect( - log, - [ - isMethodCall( - 'loadUrl', - arguments: { - 'url': 'https://test.url', - 'headers': null, - }, - ), - ], - ); - }); - - test('loadRequest', () async { - await webViewPlatform.loadRequest(WebViewRequest( - uri: Uri.parse('https://test.url'), - method: WebViewRequestMethod.get, - )); - - expect( - log, - [ - isMethodCall( - 'loadRequest', - arguments: { - 'request': { - 'uri': 'https://test.url', - 'method': 'get', - 'headers': {}, - 'body': null, - } - }, - ), - ], - ); - }); - - test('loadRequest with optional parameters', () async { - await webViewPlatform.loadRequest(WebViewRequest( - uri: Uri.parse('https://test.url'), - method: WebViewRequestMethod.get, - headers: {'foo': 'bar'}, - body: Uint8List.fromList('hello world'.codeUnits), - )); - - expect( - log, - [ - isMethodCall( - 'loadRequest', - arguments: { - 'request': { - 'uri': 'https://test.url', - 'method': 'get', - 'headers': {'foo': 'bar'}, - 'body': 'hello world'.codeUnits, - } - }, - ), - ], - ); - }); - - test('currentUrl', () async { - final String? currentUrl = await webViewPlatform.currentUrl(); - - expect(currentUrl, 'https://test.url'); - expect( - log, - [ - isMethodCall( - 'currentUrl', - arguments: null, - ), - ], - ); - }); - - test('canGoBack', () async { - final bool canGoBack = await webViewPlatform.canGoBack(); - - expect(canGoBack, true); - expect( - log, - [ - isMethodCall( - 'canGoBack', - arguments: null, - ), - ], - ); - }); - - test('canGoForward', () async { - final bool canGoForward = await webViewPlatform.canGoForward(); - - expect(canGoForward, true); - expect( - log, - [ - isMethodCall( - 'canGoForward', - arguments: null, - ), - ], - ); - }); - - test('goBack', () async { - await webViewPlatform.goBack(); - - expect( - log, - [ - isMethodCall( - 'goBack', - arguments: null, - ), - ], - ); - }); - - test('goForward', () async { - await webViewPlatform.goForward(); - - expect( - log, - [ - isMethodCall( - 'goForward', - arguments: null, - ), - ], - ); - }); - - test('reload', () async { - await webViewPlatform.reload(); - - expect( - log, - [ - isMethodCall( - 'reload', - arguments: null, - ), - ], - ); - }); - - test('clearCache', () async { - await webViewPlatform.clearCache(); - - expect( - log, - [ - isMethodCall( - 'clearCache', - arguments: null, - ), - ], - ); - }); - - test('updateSettings', () async { - final WebSettings settings = - WebSettings(userAgent: const WebSetting.of('Dart Test')); - await webViewPlatform.updateSettings(settings); - - expect( - log, - [ - isMethodCall( - 'updateSettings', - arguments: { - 'userAgent': 'Dart Test', - }, - ), - ], - ); - }); - - test('updateSettings all parameters', () async { - final WebSettings settings = WebSettings( - userAgent: const WebSetting.of('Dart Test'), - javascriptMode: JavascriptMode.disabled, - hasNavigationDelegate: true, - hasProgressTracking: true, - debuggingEnabled: true, - gestureNavigationEnabled: true, - allowsInlineMediaPlayback: true, - zoomEnabled: false, - ); - await webViewPlatform.updateSettings(settings); - - expect( - log, - [ - isMethodCall( - 'updateSettings', - arguments: { - 'userAgent': 'Dart Test', - 'jsMode': 0, - 'hasNavigationDelegate': true, - 'hasProgressTracking': true, - 'debuggingEnabled': true, - 'gestureNavigationEnabled': true, - 'allowsInlineMediaPlayback': true, - 'zoomEnabled': false, - }, - ), - ], - ); - }); - - test('updateSettings without settings', () async { - final WebSettings settings = - WebSettings(userAgent: const WebSetting.absent()); - await webViewPlatform.updateSettings(settings); - - expect( - log.isEmpty, - true, - ); - }); - - test('evaluateJavascript', () async { - final String evaluateJavascript = - await webViewPlatform.evaluateJavascript( - 'This simulates some JavaScript code.', - ); - - expect('This simulates some JavaScript code.', evaluateJavascript); - expect( - log, - [ - isMethodCall( - 'evaluateJavascript', - arguments: 'This simulates some JavaScript code.', - ), - ], - ); - }); - - test('runJavascript', () async { - await webViewPlatform.runJavascript( - 'This simulates some JavaScript code.', - ); - - expect( - log, - [ - isMethodCall( - 'runJavascript', - arguments: 'This simulates some JavaScript code.', - ), - ], - ); - }); - - test('runJavascriptReturningResult', () async { - final String evaluateJavascript = - await webViewPlatform.runJavascriptReturningResult( - 'This simulates some JavaScript code.', - ); - - expect('This simulates some JavaScript code.', evaluateJavascript); - expect( - log, - [ - isMethodCall( - 'runJavascriptReturningResult', - arguments: 'This simulates some JavaScript code.', - ), - ], - ); - }); - - test('addJavascriptChannels', () async { - final Set channels = {'channel one', 'channel two'}; - await webViewPlatform.addJavascriptChannels(channels); - - expect(log, [ - isMethodCall( - 'addJavascriptChannels', - arguments: [ - 'channel one', - 'channel two', - ], - ), - ]); - }); - - test('addJavascriptChannels without channels', () async { - final Set channels = {}; - await webViewPlatform.addJavascriptChannels(channels); - - expect(log, [ - isMethodCall( - 'addJavascriptChannels', - arguments: [], - ), - ]); - }); - - test('removeJavascriptChannels', () async { - final Set channels = {'channel one', 'channel two'}; - await webViewPlatform.removeJavascriptChannels(channels); - - expect(log, [ - isMethodCall( - 'removeJavascriptChannels', - arguments: [ - 'channel one', - 'channel two', - ], - ), - ]); - }); - - test('removeJavascriptChannels without channels', () async { - final Set channels = {}; - await webViewPlatform.removeJavascriptChannels(channels); - - expect(log, [ - isMethodCall( - 'removeJavascriptChannels', - arguments: [], - ), - ]); - }); - - test('getTitle', () async { - final String? title = await webViewPlatform.getTitle(); - - expect(title, null); - expect( - log, - [ - isMethodCall('getTitle', arguments: null), - ], - ); - }); - - test('scrollTo', () async { - await webViewPlatform.scrollTo(10, 20); - - expect( - log, - [ - isMethodCall( - 'scrollTo', - arguments: { - 'x': 10, - 'y': 20, - }, - ), - ], - ); - }); - - test('scrollBy', () async { - await webViewPlatform.scrollBy(10, 20); - - expect( - log, - [ - isMethodCall( - 'scrollBy', - arguments: { - 'x': 10, - 'y': 20, - }, - ), - ], - ); - }); - - test('getScrollX', () async { - final int x = await webViewPlatform.getScrollX(); - - expect(x, 10); - expect( - log, - [ - isMethodCall( - 'getScrollX', - arguments: null, - ), - ], - ); - }); - - test('getScrollY', () async { - final int y = await webViewPlatform.getScrollY(); - - expect(y, 20); - expect( - log, - [ - isMethodCall( - 'getScrollY', - arguments: null, - ), - ], - ); - }); - - test('backgroundColor is null by default', () { - final CreationParams creationParams = CreationParams( - webSettings: WebSettings( - userAgent: const WebSetting.of('Dart Test'), - ), - ); - final Map creationParamsMap = - MethodChannelWebViewPlatform.creationParamsToMap(creationParams); - - expect(creationParamsMap['backgroundColor'], null); - }); - - test('backgroundColor is converted to an int', () { - const Color whiteColor = Color(0xFFFFFFFF); - final CreationParams creationParams = CreationParams( - backgroundColor: whiteColor, - webSettings: WebSettings( - userAgent: const WebSetting.of('Dart Test'), - ), - ); - final Map creationParamsMap = - MethodChannelWebViewPlatform.creationParamsToMap(creationParams); - - expect(creationParamsMap['backgroundColor'], whiteColor.value); - }); - }); - - group('Tests on `plugins.flutter.io/cookie_manager` channel', () { - const MethodChannel cookieChannel = - MethodChannel('plugins.flutter.io/cookie_manager'); - - final List log = []; - cookieChannel.setMockMethodCallHandler((MethodCall methodCall) async { - log.add(methodCall); - - if (methodCall.method == 'clearCookies') { - return true; - } - - // Return null explicitly instead of relying on the implicit null - // returned by the method channel if no return statement is specified. - return null; - }); - - tearDown(() { - log.clear(); - }); - - test('clearCookies', () async { - final bool clearCookies = - await MethodChannelWebViewPlatform.clearCookies(); - - expect(clearCookies, true); - expect( - log, - [ - isMethodCall( - 'clearCookies', - arguments: null, - ), - ], - ); - }); - - test('setCookie', () async { - await MethodChannelWebViewPlatform.setCookie(const WebViewCookie( - name: 'foo', value: 'bar', domain: 'flutter.dev')); - - expect( - log, - [ - isMethodCall( - 'setCookie', - arguments: { - 'name': 'foo', - 'value': 'bar', - 'domain': 'flutter.dev', - 'path': '/', - }, - ), - ], - ); - }); - }); -} - -class MockWebViewPlatformCallbacksHandler extends Mock - implements WebViewPlatformCallbacksHandler {} - -class MockJavascriptChannelRegistry extends Mock - implements JavascriptChannelRegistry {} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart deleted file mode 100644 index 47e67379f124..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart +++ /dev/null @@ -1,72 +0,0 @@ -// Mocks generated by Mockito 5.0.16 from annotations -// in webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart. -// Do not manually edit this file. - -import 'dart:async' as _i4; - -import 'package:mockito/mockito.dart' as _i1; -import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart' - as _i3; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart' - as _i2; - -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types - -class _FakePlatformNavigationDelegateCreationParams_0 extends _i1.Fake - implements _i2.PlatformNavigationDelegateCreationParams {} - -/// A class which mocks [PlatformNavigationDelegate]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPlatformNavigationDelegate extends _i1.Mock - implements _i3.PlatformNavigationDelegate { - MockPlatformNavigationDelegate() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.PlatformNavigationDelegateCreationParams get params => - (super.noSuchMethod(Invocation.getter(#params), - returnValue: _FakePlatformNavigationDelegateCreationParams_0()) - as _i2.PlatformNavigationDelegateCreationParams); - @override - _i4.Future setOnNavigationRequest( - _i4.FutureOr Function({bool isForMainFrame, String url})? - onNavigationRequest) => - (super.noSuchMethod( - Invocation.method(#setOnNavigationRequest, [onNavigationRequest]), - returnValue: Future.value(), - returnValueForMissingStub: Future.value()) as _i4.Future); - @override - _i4.Future setOnPageStarted(void Function(String)? onPageStarted) => - (super.noSuchMethod(Invocation.method(#setOnPageStarted, [onPageStarted]), - returnValue: Future.value(), - returnValueForMissingStub: Future.value()) as _i4.Future); - @override - _i4.Future setOnPageFinished(void Function(String)? onPageFinished) => - (super.noSuchMethod( - Invocation.method(#setOnPageFinished, [onPageFinished]), - returnValue: Future.value(), - returnValueForMissingStub: Future.value()) as _i4.Future); - @override - _i4.Future setOnProgress(void Function(int)? onProgress) => - (super.noSuchMethod(Invocation.method(#setOnProgress, [onProgress]), - returnValue: Future.value(), - returnValueForMissingStub: Future.value()) as _i4.Future); - @override - _i4.Future setOnWebResourceError( - void Function(_i2.WebResourceError)? onWebResourceError) => - (super.noSuchMethod( - Invocation.method(#setOnWebResourceError, [onWebResourceError]), - returnValue: Future.value(), - returnValueForMissingStub: Future.value()) as _i4.Future); - @override - String toString() => super.toString(); -} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart deleted file mode 100644 index 5ce007579473..000000000000 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart +++ /dev/null @@ -1,78 +0,0 @@ -// Mocks generated by Mockito 5.0.16 from annotations -// in webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart. -// Do not manually edit this file. - -import 'package:mockito/mockito.dart' as _i1; -import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart' - as _i3; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart' - as _i4; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_cookie_manager.dart' - as _i2; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_widget.dart' - as _i5; -import 'package:webview_flutter_platform_interface/v4/src/types/types.dart' - as _i7; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart' - as _i6; - -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types - -class _FakePlatformWebViewCookieManager_0 extends _i1.Fake - implements _i2.PlatformWebViewCookieManager {} - -class _FakePlatformNavigationDelegate_1 extends _i1.Fake - implements _i3.PlatformNavigationDelegate {} - -class _FakePlatformWebViewController_2 extends _i1.Fake - implements _i4.PlatformWebViewController {} - -class _FakePlatformWebViewWidget_3 extends _i1.Fake - implements _i5.PlatformWebViewWidget {} - -/// A class which mocks [WebViewPlatform]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockWebViewPlatform extends _i1.Mock implements _i6.WebViewPlatform { - MockWebViewPlatform() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.PlatformWebViewCookieManager createPlatformCookieManager( - _i7.PlatformWebViewCookieManagerCreationParams? params) => - (super.noSuchMethod( - Invocation.method(#createPlatformCookieManager, [params]), - returnValue: _FakePlatformWebViewCookieManager_0()) - as _i2.PlatformWebViewCookieManager); - @override - _i3.PlatformNavigationDelegate createPlatformNavigationDelegate( - _i7.PlatformNavigationDelegateCreationParams? params) => - (super.noSuchMethod( - Invocation.method(#createPlatformNavigationDelegate, [params]), - returnValue: _FakePlatformNavigationDelegate_1()) - as _i3.PlatformNavigationDelegate); - @override - _i4.PlatformWebViewController createPlatformWebViewController( - _i7.PlatformWebViewControllerCreationParams? params) => - (super.noSuchMethod( - Invocation.method(#createPlatformWebViewController, [params]), - returnValue: _FakePlatformWebViewController_2()) - as _i4.PlatformWebViewController); - @override - _i5.PlatformWebViewWidget createPlatformWebViewWidget( - _i7.PlatformWebViewWidgetCreationParams? params) => - (super.noSuchMethod( - Invocation.method(#createPlatformWebViewWidget, [params]), - returnValue: _FakePlatformWebViewWidget_3()) - as _i5.PlatformWebViewWidget); - @override - String toString() => super.toString(); -} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart similarity index 95% rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart rename to packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart index 4ab6d587b879..34f84065e951 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart @@ -6,8 +6,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart'; -import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'webview_platform_test.mocks.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart new file mode 100644 index 000000000000..d613cddccd54 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart @@ -0,0 +1,146 @@ +// Mocks generated by Mockito 5.3.2 from annotations +// in webview_flutter_platform_interface/test/webview_platform_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; +import 'package:webview_flutter_platform_interface/src/platform_navigation_delegate.dart' + as _i3; +import 'package:webview_flutter_platform_interface/src/platform_webview_controller.dart' + as _i4; +import 'package:webview_flutter_platform_interface/src/platform_webview_cookie_manager.dart' + as _i2; +import 'package:webview_flutter_platform_interface/src/platform_webview_widget.dart' + as _i5; +import 'package:webview_flutter_platform_interface/src/types/types.dart' as _i7; +import 'package:webview_flutter_platform_interface/src/webview_platform.dart' + as _i6; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePlatformWebViewCookieManager_0 extends _i1.SmartFake + implements _i2.PlatformWebViewCookieManager { + _FakePlatformWebViewCookieManager_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePlatformNavigationDelegate_1 extends _i1.SmartFake + implements _i3.PlatformNavigationDelegate { + _FakePlatformNavigationDelegate_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePlatformWebViewController_2 extends _i1.SmartFake + implements _i4.PlatformWebViewController { + _FakePlatformWebViewController_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePlatformWebViewWidget_3 extends _i1.SmartFake + implements _i5.PlatformWebViewWidget { + _FakePlatformWebViewWidget_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [WebViewPlatform]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebViewPlatform extends _i1.Mock implements _i6.WebViewPlatform { + MockWebViewPlatform() { + _i1.throwOnMissingStub(this); + } + + @override + _i2.PlatformWebViewCookieManager createPlatformCookieManager( + _i7.PlatformWebViewCookieManagerCreationParams? params) => + (super.noSuchMethod( + Invocation.method( + #createPlatformCookieManager, + [params], + ), + returnValue: _FakePlatformWebViewCookieManager_0( + this, + Invocation.method( + #createPlatformCookieManager, + [params], + ), + ), + ) as _i2.PlatformWebViewCookieManager); + @override + _i3.PlatformNavigationDelegate createPlatformNavigationDelegate( + _i7.PlatformNavigationDelegateCreationParams? params) => + (super.noSuchMethod( + Invocation.method( + #createPlatformNavigationDelegate, + [params], + ), + returnValue: _FakePlatformNavigationDelegate_1( + this, + Invocation.method( + #createPlatformNavigationDelegate, + [params], + ), + ), + ) as _i3.PlatformNavigationDelegate); + @override + _i4.PlatformWebViewController createPlatformWebViewController( + _i7.PlatformWebViewControllerCreationParams? params) => + (super.noSuchMethod( + Invocation.method( + #createPlatformWebViewController, + [params], + ), + returnValue: _FakePlatformWebViewController_2( + this, + Invocation.method( + #createPlatformWebViewController, + [params], + ), + ), + ) as _i4.PlatformWebViewController); + @override + _i5.PlatformWebViewWidget createPlatformWebViewWidget( + _i7.PlatformWebViewWidgetCreationParams? params) => + (super.noSuchMethod( + Invocation.method( + #createPlatformWebViewWidget, + [params], + ), + returnValue: _FakePlatformWebViewWidget_3( + this, + Invocation.method( + #createPlatformWebViewWidget, + [params], + ), + ), + ) as _i5.PlatformWebViewWidget); +} diff --git a/script/configs/exclude_all_plugins_app.yaml b/script/configs/exclude_all_plugins_app.yaml index 8dd0fde5ef5f..62b20d9596bd 100644 --- a/script/configs/exclude_all_plugins_app.yaml +++ b/script/configs/exclude_all_plugins_app.yaml @@ -8,3 +8,4 @@ # This is a permament entry, as it should never be a direct app dependency. - plugin_platform_interface +- webview_flutter_platform_interface