From befd618c30f23510022d5786b933f977230c4aa9 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Mon, 12 Oct 2020 21:41:18 +0200 Subject: [PATCH 01/13] Migrate to null safety BREAKING CHANGE: this will introduce null safety and thus updates the signature of several methods. --- .../lib/method_channel_url_launcher.dart | 4 ++-- .../lib/url_launcher_platform_interface.dart | 4 ++-- .../url_launcher/url_launcher_platform_interface/pubspec.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart index 1d66a4cc633c..c09e5e007021 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart @@ -13,7 +13,7 @@ const MethodChannel _channel = MethodChannel('plugins.flutter.io/url_launcher'); /// An implementation of [UrlLauncherPlatform] that uses method channels. class MethodChannelUrlLauncher extends UrlLauncherPlatform { @override - Future canLaunch(String url) { + Future canLaunch(String url) { return _channel.invokeMethod( 'canLaunch', {'url': url}, @@ -26,7 +26,7 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { } @override - Future launch( + Future launch( String url, { required bool useSafariVC, required bool useWebView, diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart index fae84c96f3ce..cd2fa56fc199 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart @@ -38,7 +38,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { } /// Returns `true` if this platform is able to launch [url]. - Future canLaunch(String url) { + Future canLaunch(String url) { throw UnimplementedError('canLaunch() has not been implemented.'); } @@ -46,7 +46,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { /// /// For documentation on the other arguments, see the `launch` documentation /// in `package:url_launcher/url_launcher.dart`. - Future launch( + Future launch( String url, { required bool useSafariVC, required bool useWebView, diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index 823456854872..81aec6ac08e0 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter # TODO (mvanbeusekom): use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - git: + git: url: https://github.com/flutter/plugins.git ref: nnbd path: packages/plugin_platform_interface From 98e00fd1aeb936612ac739bb52aaf3efadd8d68c Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 13 Oct 2020 10:22:18 +0200 Subject: [PATCH 02/13] canLaunch and launch should return false if value is null --- .../lib/method_channel_url_launcher.dart | 4 ++-- .../lib/url_launcher_platform_interface.dart | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart index c09e5e007021..1d66a4cc633c 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart @@ -13,7 +13,7 @@ const MethodChannel _channel = MethodChannel('plugins.flutter.io/url_launcher'); /// An implementation of [UrlLauncherPlatform] that uses method channels. class MethodChannelUrlLauncher extends UrlLauncherPlatform { @override - Future canLaunch(String url) { + Future canLaunch(String url) { return _channel.invokeMethod( 'canLaunch', {'url': url}, @@ -26,7 +26,7 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { } @override - Future launch( + Future launch( String url, { required bool useSafariVC, required bool useWebView, diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart index cd2fa56fc199..fae84c96f3ce 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart @@ -38,7 +38,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { } /// Returns `true` if this platform is able to launch [url]. - Future canLaunch(String url) { + Future canLaunch(String url) { throw UnimplementedError('canLaunch() has not been implemented.'); } @@ -46,7 +46,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { /// /// For documentation on the other arguments, see the `launch` documentation /// in `package:url_launcher/url_launcher.dart`. - Future launch( + Future launch( String url, { required bool useSafariVC, required bool useWebView, From 7f5d97cf3e01ce5dd2a55fb32af7f1a72682bb3b Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 14 Oct 2020 09:07:14 +0200 Subject: [PATCH 03/13] Processed feedback on PR 3142 --- .../url_launcher_platform_interface/pubspec.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index 81aec6ac08e0..e01abe7e1dce 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -10,10 +10,7 @@ dependencies: sdk: flutter # TODO (mvanbeusekom): use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - git: - url: https://github.com/flutter/plugins.git - ref: nnbd - path: packages/plugin_platform_interface + path: ../../plugin_platform_interface dev_dependencies: flutter_test: From 716d4e6ca37d60a356923a90bb6cd5c43aaf8971 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 13 Oct 2020 12:11:54 +0200 Subject: [PATCH 04/13] Migrate to null safety --- .../url_launcher/url_launcher/CHANGELOG.md | 4 ++ .../url_launcher/example/lib/main.dart | 4 +- .../url_launcher/example/pubspec.yaml | 9 +++- .../url_launcher/lib/url_launcher.dart | 47 +++++++++---------- .../url_launcher/url_launcher/pubspec.yaml | 22 ++++++--- .../url_launcher/test/url_launcher_test.dart | 7 ++- .../url_launcher_web/pubspec.yaml | 8 +++- 7 files changed, 60 insertions(+), 41 deletions(-) diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index 8a15a2b9a6b1..d1f2c1c462f4 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.8.0-nullsafety + +* Migrate to null safety. + ## 5.7.4 * Update android compileSdkVersion to 29. diff --git a/packages/url_launcher/url_launcher/example/lib/main.dart b/packages/url_launcher/url_launcher/example/lib/main.dart index f7d90c4bef65..f493e6121401 100644 --- a/packages/url_launcher/url_launcher/example/lib/main.dart +++ b/packages/url_launcher/url_launcher/example/lib/main.dart @@ -27,7 +27,7 @@ class MyApp extends StatelessWidget { } class MyHomePage extends StatefulWidget { - MyHomePage({Key key, this.title}) : super(key: key); + MyHomePage({Key? key, required this.title}) : super(key: key); final String title; @override @@ -35,7 +35,7 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { - Future _launched; + late Future _launched; String _phone = ''; Future _launchInBrowser(String url) async { diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index b48445c3a7e9..4ada0390f891 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -12,9 +12,14 @@ dev_dependencies: path: ../../../integration_test flutter_driver: sdk: flutter - pedantic: ^1.8.0 + pedantic: ^1.10.0-nullsafety.1 mockito: ^4.1.1 - plugin_platform_interface: ^1.0.0 + # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. + plugin_platform_interface: + git: + url: https://github.com/flutter/plugins.git + ref: nnbd + path: packages/plugin_platform_interface flutter: uses-material-design: true diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart index ccc6833f0941..27bb6aba2226 100644 --- a/packages/url_launcher/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/url_launcher/lib/url_launcher.dart @@ -59,16 +59,15 @@ import 'package:url_launcher_platform_interface/url_launcher_platform_interface. /// is set to true and the universal link failed to launch. Future launch( String urlString, { - bool forceSafariVC, - bool forceWebView, - bool enableJavaScript, - bool enableDomStorage, - bool universalLinksOnly, - Map headers, - Brightness statusBarBrightness, - String webOnlyWindowName, + bool forceSafariVC = true, + bool forceWebView = false, + bool enableJavaScript = false, + bool enableDomStorage = false, + bool universalLinksOnly = false, + Map headers = const {}, + Brightness? statusBarBrightness, + String? webOnlyWindowName, }) async { - assert(urlString != null); final Uri url = Uri.parse(urlString.trimLeft()); final bool isWebURL = url.scheme == 'http' || url.scheme == 'https'; if ((forceSafariVC == true || forceWebView == true) && !isWebURL) { @@ -81,29 +80,32 @@ Future launch( /// [true] so that ui is automatically computed if [statusBarBrightness] is set. bool previousAutomaticSystemUiAdjustment = true; if (statusBarBrightness != null && - defaultTargetPlatform == TargetPlatform.iOS) { + defaultTargetPlatform == TargetPlatform.iOS && + WidgetsBinding.instance != null) { previousAutomaticSystemUiAdjustment = - WidgetsBinding.instance.renderView.automaticSystemUiAdjustment; - WidgetsBinding.instance.renderView.automaticSystemUiAdjustment = false; + WidgetsBinding.instance!.renderView.automaticSystemUiAdjustment; + WidgetsBinding.instance!.renderView.automaticSystemUiAdjustment = false; SystemChrome.setSystemUIOverlayStyle(statusBarBrightness == Brightness.light ? SystemUiOverlayStyle.dark : SystemUiOverlayStyle.light); } + final bool result = await UrlLauncherPlatform.instance.launch( urlString, - useSafariVC: forceSafariVC ?? isWebURL, - useWebView: forceWebView ?? false, - enableJavaScript: enableJavaScript ?? false, - enableDomStorage: enableDomStorage ?? false, - universalLinksOnly: universalLinksOnly ?? false, - headers: headers ?? {}, + useSafariVC: forceSafariVC, + useWebView: forceWebView, + enableJavaScript: enableJavaScript, + enableDomStorage: enableDomStorage, + universalLinksOnly: universalLinksOnly, + headers: headers, webOnlyWindowName: webOnlyWindowName, ); - assert(previousAutomaticSystemUiAdjustment != null); - if (statusBarBrightness != null) { - WidgetsBinding.instance.renderView.automaticSystemUiAdjustment = + + if (statusBarBrightness != null && WidgetsBinding.instance != null) { + WidgetsBinding.instance!.renderView.automaticSystemUiAdjustment = previousAutomaticSystemUiAdjustment; } + return result; } @@ -115,9 +117,6 @@ Future launch( /// For more information see the [Managing package visibility](https://developer.android.com/training/basics/intents/package-visibility) /// article in the Android docs. Future canLaunch(String urlString) async { - if (urlString == null) { - return false; - } return await UrlLauncherPlatform.instance.canLaunch(urlString); } diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index 49d52eecf69d..8d346481c5fc 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher description: Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes. homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher -version: 5.7.4 +version: 5.8.0-nullsafety flutter: plugin: @@ -24,13 +24,16 @@ flutter: dependencies: flutter: sdk: flutter - url_launcher_platform_interface: ^1.0.8 + # TODO(mvanbeusekom): Update to use pub.dev once null safety version is published. + url_launcher_platform_interface: + path: ../url_launcher_platform_interface # The design on https://flutter.dev/go/federated-plugins was to leave # this constraint as "any". We cannot do it right now as it fails pub publish # validation, so we set a ^ constraint. # TODO(amirh): Revisit this (either update this part in the design or the pub tool). # https://github.com/flutter/flutter/issues/46264 - url_launcher_web: ^0.1.3 + url_launcher_web: + path: ../url_launcher_web url_launcher_linux: ^0.0.1 url_launcher_macos: ^0.0.1 url_launcher_windows: ^0.0.1 @@ -38,11 +41,16 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - test: ^1.3.0 + test: ^1.10.0-nullsafety.1 mockito: ^4.1.1 - plugin_platform_interface: ^1.0.0 - pedantic: ^1.8.0 + # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. + plugin_platform_interface: + git: + url: https://github.com/flutter/plugins.git + ref: nnbd + path: packages/plugin_platform_interface + pedantic: ^1.10.0-nullsafety.1 environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ">=2.10.0-56.0.dev <3.0.0" flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/packages/url_launcher/url_launcher/test/url_launcher_test.dart b/packages/url_launcher/url_launcher/test/url_launcher_test.dart index f18e16c7e318..1934d8af2ad3 100644 --- a/packages/url_launcher/url_launcher/test/url_launcher_test.dart +++ b/packages/url_launcher/url_launcher/test/url_launcher_test.dart @@ -6,7 +6,10 @@ import 'dart:async'; import 'dart:ui'; + import 'package:flutter_test/flutter_test.dart'; +// TODO(mvanbeusekom): Remove once Mockito is migrated to null safety. +// @dart = 2.9 import 'package:mockito/mockito.dart'; import 'package:flutter/foundation.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; @@ -41,10 +44,6 @@ void main() { }); }); group('launch', () { - test('requires a non-null urlString', () { - expect(() => launch(null), throwsAssertionError); - }); - test('default behavior', () async { await launch('http://flutter.dev/'); expect( diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 957b25757036..0fa5b35d4014 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -14,7 +14,9 @@ flutter: fileName: url_launcher_web.dart dependencies: - url_launcher_platform_interface: ^1.0.8 + # TODO(mvanbeusekom): Update to use pub.dev once null safety version is published. + url_launcher_platform_interface: + path: ../url_launcher_platform_interface flutter: sdk: flutter flutter_web_plugins: @@ -24,7 +26,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - url_launcher: ^5.2.5 + # TODO(mvanbeusekom): Update to use pub.dev once null safety version is published. + url_launcher: + path: ../url_launcher pedantic: ^1.8.0 mockito: ^4.1.1 integration_test: From 85471269bdf335a2ab0b72ae0961159cfc4572d7 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 14 Oct 2020 09:53:36 +0200 Subject: [PATCH 05/13] Rebased with nnbd branch --- packages/url_launcher/url_launcher/analysis_options.yaml | 4 ++++ packages/url_launcher/url_launcher/example/pubspec.yaml | 5 +---- packages/url_launcher/url_launcher/pubspec.yaml | 5 +---- packages/url_launcher/url_launcher_web/analysis_options.yaml | 4 ++++ script/incremental_build.sh | 1 + 5 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 packages/url_launcher/url_launcher/analysis_options.yaml create mode 100644 packages/url_launcher/url_launcher_web/analysis_options.yaml diff --git a/packages/url_launcher/url_launcher/analysis_options.yaml b/packages/url_launcher/url_launcher/analysis_options.yaml new file mode 100644 index 000000000000..32ff54f2748c --- /dev/null +++ b/packages/url_launcher/url_launcher/analysis_options.yaml @@ -0,0 +1,4 @@ +include: ../../../analysis_options.yaml +analyzer: + enable-experiment: + - non-nullable \ No newline at end of file diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index 4ada0390f891..2b5caf7e9fb1 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -16,10 +16,7 @@ dev_dependencies: mockito: ^4.1.1 # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - git: - url: https://github.com/flutter/plugins.git - ref: nnbd - path: packages/plugin_platform_interface + path: ../../../plugin_platform_interface flutter: uses-material-design: true diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index 8d346481c5fc..64e8946a9f71 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -45,10 +45,7 @@ dev_dependencies: mockito: ^4.1.1 # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - git: - url: https://github.com/flutter/plugins.git - ref: nnbd - path: packages/plugin_platform_interface + path: ../../plugin_platform_interface pedantic: ^1.10.0-nullsafety.1 environment: diff --git a/packages/url_launcher/url_launcher_web/analysis_options.yaml b/packages/url_launcher/url_launcher_web/analysis_options.yaml new file mode 100644 index 000000000000..32ff54f2748c --- /dev/null +++ b/packages/url_launcher/url_launcher_web/analysis_options.yaml @@ -0,0 +1,4 @@ +include: ../../../analysis_options.yaml +analyzer: + enable-experiment: + - non-nullable \ No newline at end of file diff --git a/script/incremental_build.sh b/script/incremental_build.sh index 15a969070950..f41f91d7906f 100755 --- a/script/incremental_build.sh +++ b/script/incremental_build.sh @@ -28,6 +28,7 @@ CUSTOM_ANALYSIS_PLUGINS=( "video_player/video_player_web" "google_maps_flutter/google_maps_flutter_web" "url_launcher/url_launcher_platform_interface" + "url_launcher/url_launcher" "device_info/device_info_platform_interface" "device_info/device_info" ) From 8a2c80cbcfd38bf9306f8173e37f4516ef30a015 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 14 Oct 2020 13:23:50 +0200 Subject: [PATCH 06/13] Add null safety to web implementation --- .../url_launcher_web/CHANGELOG.md | 4 +++ .../lib/url_launcher_web.dart | 20 ++++++------ .../url_launcher_web/pubspec.yaml | 8 ++--- .../url_launcher_web_integration.dart | 32 +++---------------- 4 files changed, 23 insertions(+), 41 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index 456d458834bf..7ee73585eb55 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.2.0-nullsafety + +- Migrate to null safety. + # 0.1.4+2 - Move `lib/third_party` to `lib/src/third_party`. 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 093e06a4d8ed..b3da2cdfa09e 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 @@ -16,7 +16,7 @@ const _safariTargetTopSchemes = { 'tel', 'sms', }; -String _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; +String? _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); @@ -35,7 +35,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { }.union(_safariTargetTopSchemes); /// A constructor that allows tests to override the window object used by the plugin. - UrlLauncherPlugin({@visibleForTesting html.Window debugWindow}) + UrlLauncherPlugin({@visibleForTesting html.Window? debugWindow}) : _window = debugWindow ?? html.window { _isSafari = navigatorIsSafari(_window.navigator); } @@ -49,7 +49,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url, {String webOnlyWindowName}) { + html.WindowBase openNewWindow(String url, {String? webOnlyWindowName}) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. final target = webOnlyWindowName ?? @@ -65,13 +65,13 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { @override Future launch( String url, { - @required bool useSafariVC, - @required bool useWebView, - @required bool enableJavaScript, - @required bool enableDomStorage, - @required bool universalLinksOnly, - @required Map headers, - String webOnlyWindowName, + bool useSafariVC = false, + bool useWebView = false, + bool enableJavaScript = false, + bool enableDomStorage = false, + bool universalLinksOnly = false, + Map headers = const {}, + String? webOnlyWindowName, }) { return Future.value( openNewWindow(url, webOnlyWindowName: webOnlyWindowName) != null); diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 0fa5b35d4014..7f54bc3c946c 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/u # 0.1.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.1.4+2 +version: 0.2.0-nullsafety flutter: plugin: @@ -21,7 +21,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - meta: ^1.1.7 + meta: ^1.3.0-nullsafety.3 dev_dependencies: flutter_test: @@ -29,11 +29,11 @@ dev_dependencies: # TODO(mvanbeusekom): Update to use pub.dev once null safety version is published. url_launcher: path: ../url_launcher - pedantic: ^1.8.0 + pedantic: ^1.10.0-nullsafety.1 mockito: ^4.1.1 integration_test: path: ../../integration_test environment: - sdk: ">=2.2.0 <3.0.0" + sdk: ">=2.10.0-56.0.dev <3.0.0" flutter: ">=1.10.0 <2.0.0" diff --git a/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart b/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart index d0dd6e38ee46..b1240e7e29b2 100644 --- a/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart +++ b/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart @@ -5,6 +5,8 @@ import 'dart:html' as html; import 'package:flutter_test/flutter_test.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; +// TODO(mvanbeusekom): Remove once Mockito is migrated to null safety. +// @dart = 2.9 import 'package:mockito/mockito.dart'; import 'package:integration_test/integration_test.dart'; @@ -16,10 +18,10 @@ void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); group('UrlLauncherPlugin', () { - _MockWindow mockWindow; - _MockNavigator mockNavigator; + late _MockWindow mockWindow; + late _MockNavigator mockNavigator; - UrlLauncherPlugin plugin; + late UrlLauncherPlugin plugin; setUp(() { mockWindow = _MockWindow(); @@ -70,12 +72,6 @@ void main() { expect( plugin.launch( 'https://www.google.com', - useSafariVC: null, - useWebView: null, - universalLinksOnly: null, - enableDomStorage: null, - enableJavaScript: null, - headers: null, ), completion(isTrue)); }); @@ -84,12 +80,6 @@ void main() { expect( plugin.launch( 'mailto:name@mydomain.com', - useSafariVC: null, - useWebView: null, - universalLinksOnly: null, - enableDomStorage: null, - enableJavaScript: null, - headers: null, ), completion(isTrue)); }); @@ -98,12 +88,6 @@ void main() { expect( plugin.launch( 'tel:5551234567', - useSafariVC: null, - useWebView: null, - universalLinksOnly: null, - enableDomStorage: null, - enableJavaScript: null, - headers: null, ), completion(isTrue)); }); @@ -112,12 +96,6 @@ void main() { expect( plugin.launch( 'sms:+19725551212?body=hello%20there', - useSafariVC: null, - useWebView: null, - universalLinksOnly: null, - enableDomStorage: null, - enableJavaScript: null, - headers: null, ), completion(isTrue)); }); From fd9bae3e808cfc17a39249e8551d8e5ceacca26b Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Thu, 15 Oct 2020 18:08:36 +0200 Subject: [PATCH 07/13] Update Dart SDK version --- packages/url_launcher/url_launcher_web/test/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/url_launcher/url_launcher_web/test/pubspec.yaml b/packages/url_launcher/url_launcher_web/test/pubspec.yaml index e755dff85004..b8c541f72986 100644 --- a/packages/url_launcher/url_launcher_web/test/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/test/pubspec.yaml @@ -2,7 +2,7 @@ name: regular_integration_tests publish_to: none environment: - sdk: ">=2.2.2 <3.0.0" + sdk: ">=2.10.0-56.0.dev <3.0.0" dependencies: flutter: From 4fb1ceeefbf0161a57687c75e828283aec01d842 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Thu, 15 Oct 2020 18:10:47 +0200 Subject: [PATCH 08/13] Depend on plugin_platform_interface from GIT --- packages/url_launcher/url_launcher/example/pubspec.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index 2b5caf7e9fb1..7e464dec6fe3 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -16,7 +16,10 @@ dev_dependencies: mockito: ^4.1.1 # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - path: ../../../plugin_platform_interface + git: + url: https://github.com/flutter/plugins.git + ref: nnbd + path: packages/plugin_platform_interface flutter: uses-material-design: true From e1a0b6c9f680fa99874c4377f3c6770f9e6c325a Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Fri, 16 Oct 2020 10:11:16 +0200 Subject: [PATCH 09/13] Bump major version --- packages/url_launcher/url_launcher/CHANGELOG.md | 2 +- packages/url_launcher/url_launcher/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index d1f2c1c462f4..998c0d243206 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,4 +1,4 @@ -## 5.8.0-nullsafety +## 6.0.0-nullsafety * Migrate to null safety. diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index 64e8946a9f71..aafc48751fb6 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher description: Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes. homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher -version: 5.8.0-nullsafety +version: 6.0.0-nullsafety flutter: plugin: From 9d4445d7efce554a447a7c942b41e36fb247fc65 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Fri, 16 Oct 2020 11:57:06 +0200 Subject: [PATCH 10/13] Add new line at end of file --- packages/url_launcher/url_launcher/analysis_options.yaml | 2 +- packages/url_launcher/url_launcher_web/analysis_options.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/url_launcher/url_launcher/analysis_options.yaml b/packages/url_launcher/url_launcher/analysis_options.yaml index 32ff54f2748c..3d64bb57fe49 100644 --- a/packages/url_launcher/url_launcher/analysis_options.yaml +++ b/packages/url_launcher/url_launcher/analysis_options.yaml @@ -1,4 +1,4 @@ include: ../../../analysis_options.yaml analyzer: enable-experiment: - - non-nullable \ No newline at end of file + - non-nullable diff --git a/packages/url_launcher/url_launcher_web/analysis_options.yaml b/packages/url_launcher/url_launcher_web/analysis_options.yaml index 32ff54f2748c..3d64bb57fe49 100644 --- a/packages/url_launcher/url_launcher_web/analysis_options.yaml +++ b/packages/url_launcher/url_launcher_web/analysis_options.yaml @@ -1,4 +1,4 @@ include: ../../../analysis_options.yaml analyzer: enable-experiment: - - non-nullable \ No newline at end of file + - non-nullable From 0ac5be033e2a1a3d12bd15181a029544ab9057c0 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 20 Oct 2020 14:13:40 +0200 Subject: [PATCH 11/13] Revert "Add null safety to web implementation" This reverts commit b199e622a09bdc85b98d2c7b932be811e8e6178f. --- .../url_launcher_web/CHANGELOG.md | 4 --- .../lib/url_launcher_web.dart | 20 ++++++------ .../url_launcher_web/pubspec.yaml | 8 ++--- .../url_launcher_web_integration.dart | 32 ++++++++++++++++--- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index 7ee73585eb55..456d458834bf 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,7 +1,3 @@ -# 0.2.0-nullsafety - -- Migrate to null safety. - # 0.1.4+2 - Move `lib/third_party` to `lib/src/third_party`. 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 b3da2cdfa09e..093e06a4d8ed 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 @@ -16,7 +16,7 @@ const _safariTargetTopSchemes = { 'tel', 'sms', }; -String? _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; +String _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); @@ -35,7 +35,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { }.union(_safariTargetTopSchemes); /// A constructor that allows tests to override the window object used by the plugin. - UrlLauncherPlugin({@visibleForTesting html.Window? debugWindow}) + UrlLauncherPlugin({@visibleForTesting html.Window debugWindow}) : _window = debugWindow ?? html.window { _isSafari = navigatorIsSafari(_window.navigator); } @@ -49,7 +49,7 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url, {String? webOnlyWindowName}) { + html.WindowBase openNewWindow(String url, {String webOnlyWindowName}) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. final target = webOnlyWindowName ?? @@ -65,13 +65,13 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { @override Future launch( String url, { - bool useSafariVC = false, - bool useWebView = false, - bool enableJavaScript = false, - bool enableDomStorage = false, - bool universalLinksOnly = false, - Map headers = const {}, - String? webOnlyWindowName, + @required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + String webOnlyWindowName, }) { return Future.value( openNewWindow(url, webOnlyWindowName: webOnlyWindowName) != null); diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 7f54bc3c946c..0fa5b35d4014 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/u # 0.1.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.2.0-nullsafety +version: 0.1.4+2 flutter: plugin: @@ -21,7 +21,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - meta: ^1.3.0-nullsafety.3 + meta: ^1.1.7 dev_dependencies: flutter_test: @@ -29,11 +29,11 @@ dev_dependencies: # TODO(mvanbeusekom): Update to use pub.dev once null safety version is published. url_launcher: path: ../url_launcher - pedantic: ^1.10.0-nullsafety.1 + pedantic: ^1.8.0 mockito: ^4.1.1 integration_test: path: ../../integration_test environment: - sdk: ">=2.10.0-56.0.dev <3.0.0" + sdk: ">=2.2.0 <3.0.0" flutter: ">=1.10.0 <2.0.0" diff --git a/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart b/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart index b1240e7e29b2..d0dd6e38ee46 100644 --- a/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart +++ b/packages/url_launcher/url_launcher_web/test/test_driver/url_launcher_web_integration.dart @@ -5,8 +5,6 @@ import 'dart:html' as html; import 'package:flutter_test/flutter_test.dart'; import 'package:url_launcher_web/url_launcher_web.dart'; -// TODO(mvanbeusekom): Remove once Mockito is migrated to null safety. -// @dart = 2.9 import 'package:mockito/mockito.dart'; import 'package:integration_test/integration_test.dart'; @@ -18,10 +16,10 @@ void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); group('UrlLauncherPlugin', () { - late _MockWindow mockWindow; - late _MockNavigator mockNavigator; + _MockWindow mockWindow; + _MockNavigator mockNavigator; - late UrlLauncherPlugin plugin; + UrlLauncherPlugin plugin; setUp(() { mockWindow = _MockWindow(); @@ -72,6 +70,12 @@ void main() { expect( plugin.launch( 'https://www.google.com', + useSafariVC: null, + useWebView: null, + universalLinksOnly: null, + enableDomStorage: null, + enableJavaScript: null, + headers: null, ), completion(isTrue)); }); @@ -80,6 +84,12 @@ void main() { expect( plugin.launch( 'mailto:name@mydomain.com', + useSafariVC: null, + useWebView: null, + universalLinksOnly: null, + enableDomStorage: null, + enableJavaScript: null, + headers: null, ), completion(isTrue)); }); @@ -88,6 +98,12 @@ void main() { expect( plugin.launch( 'tel:5551234567', + useSafariVC: null, + useWebView: null, + universalLinksOnly: null, + enableDomStorage: null, + enableJavaScript: null, + headers: null, ), completion(isTrue)); }); @@ -96,6 +112,12 @@ void main() { expect( plugin.launch( 'sms:+19725551212?body=hello%20there', + useSafariVC: null, + useWebView: null, + universalLinksOnly: null, + enableDomStorage: null, + enableJavaScript: null, + headers: null, ), completion(isTrue)); }); From 6bab67b348c4c7475f2641fe6af4397923a8eb66 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 20 Oct 2020 14:21:26 +0200 Subject: [PATCH 12/13] Disable dependency on web until nnbd is supported --- packages/url_launcher/url_launcher/pubspec.yaml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index aafc48751fb6..ef844e65f199 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -12,8 +12,9 @@ flutter: pluginClass: UrlLauncherPlugin ios: pluginClass: FLTURLLauncherPlugin - web: - default_package: url_launcher_web + # TODO(mvanbeusekom): Temporary disabled until web is migrated to nnbd (advised by @blasten). + #web: + # default_package: url_launcher_web linux: default_package: url_laucher_linux macos: @@ -32,11 +33,11 @@ dependencies: # validation, so we set a ^ constraint. # TODO(amirh): Revisit this (either update this part in the design or the pub tool). # https://github.com/flutter/flutter/issues/46264 - url_launcher_web: - path: ../url_launcher_web url_launcher_linux: ^0.0.1 url_launcher_macos: ^0.0.1 url_launcher_windows: ^0.0.1 + # TODO(mvanbeusekom): Temporary disabled until web is migrated to nnbd (advised by @blasten). + url_launcher_web: ^0.1.3 dev_dependencies: flutter_test: @@ -45,7 +46,10 @@ dev_dependencies: mockito: ^4.1.1 # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - path: ../../plugin_platform_interface + git: + url: https://github.com/flutter/plugins.git + ref: nnbd + path: packages/plugin_platform_interface pedantic: ^1.10.0-nullsafety.1 environment: From 42719e77b8ddf77bd155d9637fc24d713b06f089 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 20 Oct 2020 14:45:42 +0200 Subject: [PATCH 13/13] Depend on GIT --- packages/url_launcher/url_launcher/pubspec.yaml | 2 +- .../url_launcher_platform_interface/pubspec.yaml | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index ef844e65f199..43688ff6954b 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: url_launcher_macos: ^0.0.1 url_launcher_windows: ^0.0.1 # TODO(mvanbeusekom): Temporary disabled until web is migrated to nnbd (advised by @blasten). - url_launcher_web: ^0.1.3 + #url_launcher_web: ^0.1.3 dev_dependencies: flutter_test: diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index e01abe7e1dce..cbe2cf05e043 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -8,9 +8,12 @@ version: 2.0.0-nullsafety dependencies: flutter: sdk: flutter - # TODO (mvanbeusekom): use pub.dev once 1.10.0-nullsafety released. + # TODO (mvanbeusekom): Update to use pub.dev once 1.10.0-nullsafety released. plugin_platform_interface: - path: ../../plugin_platform_interface + git: + url: https://github.com/flutter/plugins.git + ref: nnbd + path: packages/plugin_platform_interface dev_dependencies: flutter_test: