diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index a6ea2c9a5d5a..e20f5fbbb636 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..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 @@ -1,49 +1,46 @@ 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'; -class UrlLauncherPlugin { +/// 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) { - 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}'"); - } + /// Opens the given [url] in a new window. + /// + /// Returns the newly created window. + @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, ''); + @override + 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..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,18 +7,18 @@ 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'; 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 +45,9 @@ void main() { expect(newWindow, isNot(equals(html.window))); expect(newWindow.opener, equals(html.window)); }); + + test('does not implement closeWebView()', () { + expect(closeWebView(), throwsUnimplementedError); + }); }); }