From d249f9e968be7d221868898a8bdf31b8083a2001 Mon Sep 17 00:00:00 2001 From: Michael Klimushyn Date: Tue, 26 Nov 2019 15:50:01 -0800 Subject: [PATCH 1/2] [webview_flutter] Fix pedantic lint errors --- packages/webview_flutter/CHANGELOG.md | 5 +++++ .../webview_flutter/analysis_options.yaml | 11 ---------- .../webview_flutter/example/lib/main.dart | 10 +++++---- .../test_driver/webview_flutter_e2e_test.dart | 2 +- .../lib/platform_interface.dart | 8 +++++++ .../lib/src/webview_method_channel.dart | 2 ++ .../webview_flutter/lib/webview_flutter.dart | 8 +++++-- packages/webview_flutter/pubspec.yaml | 2 +- .../test/webview_flutter_test.dart | 22 +++++++++---------- 9 files changed, 40 insertions(+), 30 deletions(-) delete mode 100644 packages/webview_flutter/analysis_options.yaml diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index e577b30f53af..c90205d42c11 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.3.17 + +* Fix pedantic lint errors. Added missing documentation and awaited some futures + in tests and the example app. + ## 0.3.16 * Add support for async NavigationDelegates. Synchronous NavigationDelegates diff --git a/packages/webview_flutter/analysis_options.yaml b/packages/webview_flutter/analysis_options.yaml deleted file mode 100644 index d4ccef63f1d1..000000000000 --- a/packages/webview_flutter/analysis_options.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# This is a temporary file to allow us to land a new set of linter rules in a -# series of manageable patches instead of one gigantic PR. It disables some of -# the new lints that are already failing on this plugin, for this plugin. It -# should be deleted and the failing lints addressed as soon as possible. - -include: ../../analysis_options.yaml - -analyzer: - errors: - public_member_api_docs: ignore - unawaited_futures: ignore diff --git a/packages/webview_flutter/example/lib/main.dart b/packages/webview_flutter/example/lib/main.dart index 5f3e0f8ff4fa..4016e1063dad 100644 --- a/packages/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/example/lib/main.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// ignore_for_file: public_member_api_docs + import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; @@ -194,7 +196,7 @@ class SampleMenu extends StatelessWidget { WebViewController controller, BuildContext context) async { // Send a message with the user agent string to the Toaster JavaScript channel we registered // with the WebView. - controller.evaluateJavascript( + await controller.evaluateJavascript( 'Toaster.postMessage("User Agent: " + navigator.userAgent);'); } @@ -250,7 +252,7 @@ class SampleMenu extends StatelessWidget { WebViewController controller, BuildContext context) async { final String contentBase64 = base64Encode(const Utf8Encoder().convert(kNavigationExamplePage)); - controller.loadUrl('data:text/html;base64,$contentBase64'); + await controller.loadUrl('data:text/html;base64,$contentBase64'); } Widget _getCookieList(String cookies) { @@ -291,7 +293,7 @@ class NavigationControls extends StatelessWidget { ? null : () async { if (await controller.canGoBack()) { - controller.goBack(); + await controller.goBack(); } else { Scaffold.of(context).showSnackBar( const SnackBar(content: Text("No back history item")), @@ -306,7 +308,7 @@ class NavigationControls extends StatelessWidget { ? null : () async { if (await controller.canGoForward()) { - controller.goForward(); + await controller.goForward(); } else { Scaffold.of(context).showSnackBar( const SnackBar( diff --git a/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart b/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart index 2e5c27fd402e..ccd716607d60 100644 --- a/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart +++ b/packages/webview_flutter/example/test_driver/webview_flutter_e2e_test.dart @@ -11,6 +11,6 @@ Future main() async { final FlutterDriver driver = await FlutterDriver.connect(); final String result = await driver.requestData(null, timeout: const Duration(minutes: 1)); - driver.close(); + await driver.close(); exit(result == 'pass' ? 0 : 1); } diff --git a/packages/webview_flutter/lib/platform_interface.dart b/packages/webview_flutter/lib/platform_interface.dart index cf6a2fd933f7..3646869b84ab 100644 --- a/packages/webview_flutter/lib/platform_interface.dart +++ b/packages/webview_flutter/lib/platform_interface.dart @@ -220,6 +220,10 @@ class WebSetting { /// /// The `userAgent` parameter must not be null. class WebSettings { + /// Construct an instance with initial settings. Future setting changes can be + /// sent with [WebviewPlatform#updateSettings]. + /// + /// The `userAgent` parameter must not be null. WebSettings({ this.javascriptMode, this.hasNavigationDelegate, @@ -258,6 +262,10 @@ class WebSettings { /// /// The `autoMediaPlaybackPolicy` parameter must not be null. class CreationParams { + /// Constructs an instance to use when creating a new + /// [WebViewPlatformController]. + /// + /// The `autoMediaPlaybackPolicy` parameter must not be null. CreationParams({ this.initialUrl, this.webSettings, diff --git a/packages/webview_flutter/lib/src/webview_method_channel.dart b/packages/webview_flutter/lib/src/webview_method_channel.dart index 2bb7470a1145..ba5b9583db4a 100644 --- a/packages/webview_flutter/lib/src/webview_method_channel.dart +++ b/packages/webview_flutter/lib/src/webview_method_channel.dart @@ -10,6 +10,8 @@ import '../platform_interface.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) : assert(_platformCallbacksHandler != null), _channel = MethodChannel('plugins.flutter.io/webview_$id') { diff --git a/packages/webview_flutter/lib/webview_flutter.dart b/packages/webview_flutter/lib/webview_flutter.dart index 11541d322dfb..0741b27d8328 100644 --- a/packages/webview_flutter/lib/webview_flutter.dart +++ b/packages/webview_flutter/lib/webview_flutter.dart @@ -12,8 +12,11 @@ import 'platform_interface.dart'; import 'src/webview_android.dart'; import 'src/webview_cupertino.dart'; +/// Optional callback invoked when a [WebView] is first created. [controller] is +/// the [WebViewController] for the created WebView. typedef void WebViewCreatedCallback(WebViewController controller); +/// Describes the state of JavaScript support in a given WebView. enum JavascriptMode { /// JavaScript execution is disabled. disabled, @@ -589,10 +592,11 @@ class WebViewController { final Set channelsToRemove = currentChannels.difference(newChannelNames); if (channelsToRemove.isNotEmpty) { - _webViewPlatformController.removeJavascriptChannels(channelsToRemove); + await _webViewPlatformController + .removeJavascriptChannels(channelsToRemove); } if (channelsToAdd.isNotEmpty) { - _webViewPlatformController.addJavascriptChannels(channelsToAdd); + await _webViewPlatformController.addJavascriptChannels(channelsToAdd); } _platformCallbacksHandler._updateJavascriptChannelsFromSet(newChannels); } diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index 4883f049f759..236d591aea61 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: webview_flutter description: A Flutter plugin that provides a WebView widget on Android and iOS. -version: 0.3.16 +version: 0.3.17 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index 5184ddd13de3..728686f45e5b 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -83,7 +83,7 @@ void main() { expect(controller, isNotNull); - controller.loadUrl('https://flutter.io'); + await controller.loadUrl('https://flutter.io'); expect(await controller.currentUrl(), 'https://flutter.io'); }); @@ -272,11 +272,11 @@ void main() { expect(await controller.currentUrl(), 'https://youtube.com'); - controller.loadUrl('https://flutter.io'); + await controller.loadUrl('https://flutter.io'); expect(await controller.currentUrl(), 'https://flutter.io'); - controller.goBack(); + await controller.goBack(); expect(await controller.currentUrl(), 'https://youtube.com'); }); @@ -296,15 +296,15 @@ void main() { expect(await controller.currentUrl(), 'https://youtube.com'); - controller.loadUrl('https://flutter.io'); + await controller.loadUrl('https://flutter.io'); expect(await controller.currentUrl(), 'https://flutter.io'); - controller.goBack(); + await controller.goBack(); expect(await controller.currentUrl(), 'https://youtube.com'); - controller.goForward(); + await controller.goForward(); expect(await controller.currentUrl(), 'https://flutter.io'); }); @@ -324,13 +324,13 @@ void main() { // Test a WebView without an explicitly set first URL. expect(await controller.currentUrl(), isNull); - controller.loadUrl('https://youtube.com'); + await controller.loadUrl('https://youtube.com'); expect(await controller.currentUrl(), 'https://youtube.com'); - controller.loadUrl('https://flutter.io'); + await controller.loadUrl('https://flutter.io'); expect(await controller.currentUrl(), 'https://flutter.io'); - controller.goBack(); + await controller.goBack(); expect(await controller.currentUrl(), 'https://youtube.com'); }); @@ -351,12 +351,12 @@ void main() { expect(platformWebView.currentUrl, 'https://flutter.io'); expect(platformWebView.amountOfReloadsOnCurrentUrl, 0); - controller.reload(); + await controller.reload(); expect(platformWebView.currentUrl, 'https://flutter.io'); expect(platformWebView.amountOfReloadsOnCurrentUrl, 1); - controller.loadUrl('https://youtube.com'); + await controller.loadUrl('https://youtube.com'); expect(platformWebView.amountOfReloadsOnCurrentUrl, 0); }); From 3e4ba95ef397957759bcce00b863792dca59ae50 Mon Sep 17 00:00:00 2001 From: Michael Klimushyn Date: Tue, 3 Dec 2019 12:37:24 -0800 Subject: [PATCH 2/2] Review feedback --- packages/webview_flutter/lib/webview_flutter.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/lib/webview_flutter.dart b/packages/webview_flutter/lib/webview_flutter.dart index 0741b27d8328..c17f8b9a25b0 100644 --- a/packages/webview_flutter/lib/webview_flutter.dart +++ b/packages/webview_flutter/lib/webview_flutter.dart @@ -12,11 +12,11 @@ import 'platform_interface.dart'; import 'src/webview_android.dart'; import 'src/webview_cupertino.dart'; -/// Optional callback invoked when a [WebView] is first created. [controller] is -/// the [WebViewController] for the created WebView. +/// Optional callback invoked when a web view is first created. [controller] is +/// the [WebViewController] for the created web view. typedef void WebViewCreatedCallback(WebViewController controller); -/// Describes the state of JavaScript support in a given WebView. +/// Describes the state of JavaScript support in a given web view. enum JavascriptMode { /// JavaScript execution is disabled. disabled,