From 5c35d3f69780134dc3f8414cb800a85a813677a6 Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Fri, 25 Oct 2019 15:38:20 -0700 Subject: [PATCH 1/3] [url_launcher] Migrate url_launcher_web to the platform interface --- .../url_launcher_web/CHANGELOG.md | 4 ++ .../lib/url_launcher_web.dart | 56 +++++++++---------- .../url_launcher_web/pubspec.yaml | 3 +- .../test/url_launcher_web_test.dart | 15 +++-- 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index a6ea2c9a5d5a..8561ca208530 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.0.2 + +- Switch to using `url_launcher_platform_interface` + # 0.0.1 - Initial open-source release. diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index e000c1fc9bea..080c4dd668d7 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -4,46 +4,40 @@ import 'dart:html' as html; import 'package:flutter/services.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:meta/meta.dart'; +import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; -class UrlLauncherPlugin { +class UrlLauncherPlugin extends UrlLauncherPlatform { static void registerWith(Registrar registrar) { - final MethodChannel channel = MethodChannel( - 'plugins.flutter.io/url_launcher', - const StandardMethodCodec(), - registrar.messenger); - final UrlLauncherPlugin instance = UrlLauncherPlugin(); - channel.setMethodCallHandler(instance.handleMethodCall); + UrlLauncherPlatform.instance = UrlLauncherPlugin(); } - Future handleMethodCall(MethodCall call) async { - switch (call.method) { - case 'canLaunch': - final String url = call.arguments['url']; - return _canLaunch(url); - case 'launch': - final String url = call.arguments['url']; - return _launch(url); - default: - throw PlatformException( - code: 'Unimplemented', - details: "The url_launcher plugin for web doesn't implement " - "the method '${call.method}'"); - } + @visibleForTesting + html.WindowBase openNewWindow(String url) { + return html.window.open(url, ''); } - bool _canLaunch(String url) { + @override + Future canLaunch(String url) { final Uri parsedUrl = Uri.tryParse(url); - if (parsedUrl == null) return false; - - return parsedUrl.isScheme('http') || parsedUrl.isScheme('https'); - } + if (parsedUrl == null) return Future.value(false); - bool _launch(String url) { - return openNewWindow(url) != null; + return Future.value( + parsedUrl.isScheme('http') || parsedUrl.isScheme('https')); } - @visibleForTesting - html.WindowBase openNewWindow(String url) { - return html.window.open(url, ''); + /// Returns `true` if the given [url] was successfully launched. + /// + /// For documentation on the other arguments, see the `launch` documentation + /// in `package:url_launcher/url_launcher.dart`. + Future launch( + String url, { + @required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + }) { + return Future.value(openNewWindow(url) != null); } } diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index b76aea1da6ab..e94a4d0d81c0 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_web description: Web platform implementation of url_launcher author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web -version: 0.0.1 +version: 0.0.2 flutter: plugin: @@ -17,6 +17,7 @@ dependencies: flutter_web_plugins: sdk: flutter meta: ^1.1.7 + url_launcher_platform_interface: ^1.0.1 dev_dependencies: flutter_test: diff --git a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart index 0bf9678cfe16..75c350baa3bb 100644 --- a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart @@ -10,15 +10,16 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; +import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; void main() { group('URL Launcher for Web', () { setUp(() { - TestWidgetsFlutterBinding.ensureInitialized(); - webPluginRegistry.registerMessageHandler(); - final Registrar registrar = - webPluginRegistry.registrarFor(UrlLauncherPlugin); - UrlLauncherPlugin.registerWith(registrar); + UrlLauncherPlatform.instance = UrlLauncherPlugin(); + }); + + test('$UrlLauncherPlugin is the live instance', () { + expect(UrlLauncherPlatform.instance, isA()); }); test('can launch "http" URLs', () { @@ -45,5 +46,9 @@ void main() { expect(newWindow, isNot(equals(html.window))); expect(newWindow.opener, equals(html.window)); }); + + test('does not implement closeWebView()', () { + expect(closeWebView(), throwsUnimplementedError); + }); }); } From 5c4184b3ddf1808f98659f45fa76a622164a2b0c Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Fri, 25 Oct 2019 15:42:22 -0700 Subject: [PATCH 2/3] Fix analyzer errors --- .../url_launcher_web/lib/url_launcher_web.dart | 9 ++++----- .../url_launcher_web/test/url_launcher_web_test.dart | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 080c4dd668d7..4d26db5462c6 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:html' as html; -import 'package:flutter/services.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:meta/meta.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; @@ -11,6 +10,9 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { UrlLauncherPlatform.instance = UrlLauncherPlugin(); } + /// Opens the given [url] in a new window. + /// + /// Returns the newly created window. @visibleForTesting html.WindowBase openNewWindow(String url) { return html.window.open(url, ''); @@ -25,10 +27,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { parsedUrl.isScheme('http') || parsedUrl.isScheme('https')); } - /// Returns `true` if the given [url] was successfully launched. - /// - /// For documentation on the other arguments, see the `launch` documentation - /// in `package:url_launcher/url_launcher.dart`. + @override Future launch( String url, { @required bool useSafariVC, diff --git a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart index 75c350baa3bb..6109ea7a80d3 100644 --- a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart @@ -7,7 +7,6 @@ import 'dart:html' as html; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; From bfd992e109d28fdf37420b0712d5caa24b1a2710 Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Fri, 25 Oct 2019 15:49:33 -0700 Subject: [PATCH 3/3] Add doc comments --- packages/url_launcher/url_launcher_web/CHANGELOG.md | 2 +- .../url_launcher/url_launcher_web/lib/url_launcher_web.dart | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index 8561ca208530..e20f5fbbb636 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,6 +1,6 @@ # 0.0.2 -- Switch to using `url_launcher_platform_interface` +- Switch to using `url_launcher_platform_interface`. # 0.0.1 diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 4d26db5462c6..8882303a92a5 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -5,7 +5,11 @@ import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:meta/meta.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; +/// The web implementation of [UrlLauncherPlatform]. +/// +/// This class implements the `package:url_launcher` functionality for the web. class UrlLauncherPlugin extends UrlLauncherPlatform { + /// Registers this class as the default instance of [UrlLauncherPlatform]. static void registerWith(Registrar registrar) { UrlLauncherPlatform.instance = UrlLauncherPlugin(); }