[url_launcher] Migrate url_launcher_web to the platform interface (#2237)
* [url_launcher] Migrate url_launcher_web to the platform interface
* Fix analyzer errors
* Add doc comments
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index a6ea2c9..e20f5fb 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 e000c1f..8882303 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<dynamic> 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}'");
- }
- }
-
- bool _canLaunch(String url) {
- final Uri parsedUrl = Uri.tryParse(url);
- if (parsedUrl == null) return false;
-
- return parsedUrl.isScheme('http') || parsedUrl.isScheme('https');
- }
-
- bool _launch(String url) {
- return openNewWindow(url) != null;
- }
-
+ /// Opens the given [url] in a new window.
+ ///
+ /// Returns the newly created window.
@visibleForTesting
html.WindowBase openNewWindow(String url) {
return html.window.open(url, '');
}
+
+ @override
+ Future<bool> canLaunch(String url) {
+ final Uri parsedUrl = Uri.tryParse(url);
+ if (parsedUrl == null) return Future<bool>.value(false);
+
+ return Future<bool>.value(
+ parsedUrl.isScheme('http') || parsedUrl.isScheme('https'));
+ }
+
+ @override
+ Future<bool> launch(
+ String url, {
+ @required bool useSafariVC,
+ @required bool useWebView,
+ @required bool enableJavaScript,
+ @required bool enableDomStorage,
+ @required bool universalLinksOnly,
+ @required Map<String, String> headers,
+ }) {
+ return Future<bool>.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 b76aea1..e94a4d0 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -2,7 +2,7 @@
description: Web platform implementation of url_launcher
author: Flutter Team <flutter-dev@googlegroups.com>
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 @@
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 0bf9678..6109ea7 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<UrlLauncherPlugin>());
});
test('can launch "http" URLs', () {
@@ -45,5 +45,9 @@
expect(newWindow, isNot(equals(html.window)));
expect(newWindow.opener, equals(html.window));
});
+
+ test('does not implement closeWebView()', () {
+ expect(closeWebView(), throwsUnimplementedError);
+ });
});
}