diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index a5364726bee3..e8779cb5195e 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.5.1 + +* Added webOnlyWindowName web only parameter + ## 5.5.0 * Support Linux by default. diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index 576b1041129b..ae8657755409 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -1,20 +1,41 @@ -name: url_launcher_example -description: Demonstrates how to use the url_launcher plugin. +name: url_launcher_web +description: Web platform implementation of url_launcher +homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web +# 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.3 +flutter: + plugin: + platforms: + web: + pluginClass: UrlLauncherPlugin + fileName: url_launcher_web.dart dependencies: + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_platform_interface + platform_detect: ^1.4.0 flutter: sdk: flutter - url_launcher: - path: ../ + flutter_web_plugins: + sdk: flutter + meta: ^1.1.7 dev_dependencies: - e2e: - path: ../../../e2e - flutter_driver: + flutter_test: sdk: flutter + url_launcher: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher pedantic: ^1.8.0 mockito: ^4.1.1 - plugin_platform_interface: ^1.0.0 -flutter: - uses-material-design: true +environment: + sdk: ">=2.2.0 <3.0.0" + flutter: ">=1.10.0 <2.0.0" \ No newline at end of file diff --git a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart index 41b9f6f5ec6c..a81a0aedcd4b 100644 --- a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart +++ b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart @@ -16,27 +16,32 @@ void main() { const Map defaultHeaders = { 'my_header_key': 'my_header_value' }; - verifyNever(mock.launch(defaultUrl, - useSafariVC: false, - useWebView: false, - enableDomStorage: false, - enableJavaScript: false, - universalLinksOnly: false, - headers: defaultHeaders)); + verifyNever(mock.launch( + defaultUrl, + useSafariVC: false, + useWebView: false, + enableDomStorage: false, + enableJavaScript: false, + universalLinksOnly: false, + headers: defaultHeaders, + )); Finder browserlaunchBtn = find.widgetWithText(RaisedButton, 'Launch in browser'); expect(browserlaunchBtn, findsOneWidget); await tester.tap(browserlaunchBtn); - verify(mock.launch(defaultUrl, - useSafariVC: false, - useWebView: false, - enableDomStorage: false, - enableJavaScript: false, - universalLinksOnly: false, - headers: defaultHeaders)) - .called(1); + verify( + mock.launch( + defaultUrl, + useSafariVC: false, + useWebView: false, + enableDomStorage: false, + enableJavaScript: false, + universalLinksOnly: false, + headers: defaultHeaders, + ), + ).called(1); }); } diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart index 2ce725da8642..bc171062093c 100644 --- a/packages/url_launcher/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/url_launcher/lib/url_launcher.dart @@ -44,6 +44,9 @@ import 'package:url_launcher_platform_interface/url_launcher_platform_interface. /// [enableDomStorage] is an Android only setting. If true, WebView enable /// DOM storage. /// [headers] is an Android only setting that adds headers to the WebView. +/// [webOnlyWindowName] is an Web only setting . _blank opens the new url in new tab , +/// _self opens the new url in current tab. +/// Default behaviour is to open the url in new tab. /// /// Note that if any of the above are set to true but the URL is not a web URL, /// this will throw a [PlatformException]. @@ -63,6 +66,7 @@ Future launch( bool universalLinksOnly, Map headers, Brightness statusBarBrightness, + String webOnlyWindowName, }) async { assert(urlString != null); final Uri url = Uri.parse(urlString.trimLeft()); @@ -93,6 +97,7 @@ Future launch( enableDomStorage: enableDomStorage ?? false, universalLinksOnly: universalLinksOnly ?? false, headers: headers ?? {}, + webOnlyWindowName: webOnlyWindowName, ); assert(previousAutomaticSystemUiAdjustment != null); if (statusBarBrightness != null) { diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index 299de938165f..ab250774c4c3 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.5.0 +version: 5.5.1 flutter: plugin: @@ -22,13 +22,21 @@ flutter: dependencies: flutter: sdk: flutter - url_launcher_platform_interface: ^1.0.4 + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/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.0+1 + url_launcher_web: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_web url_launcher_linux: ^0.0.1 url_launcher_macos: ^0.0.1 diff --git a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md index 8766d7a3f239..768042be4cef 100644 --- a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.8 + +* Added webOnlyWindowName parameter + ## 1.0.7 * Update lower bound of dart dependency to 2.1.0. 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 3fbd2ee01843..f87630ee3045 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 @@ -35,6 +35,7 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, + String webOnlyWindowName, }) { return _channel.invokeMethod( 'launch', 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 164555d63e0c..1de5742c1f6f 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 @@ -55,6 +55,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, + String webOnlyWindowName, }) { throw UnimplementedError('launch() has not been implemented.'); } diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index 4486134310c2..0c4096278bcb 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -3,7 +3,7 @@ description: A common platform interface for the url_launcher plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_platform_interface # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.0.7 +version: 1.0.8 dependencies: flutter: diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index ed8014297776..a57fecc919de 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.1.3 + +- Added "windowName" parameter that lets you launch url in new tab,same tab or in an iframe + # 0.1.2+1 - Update docs 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 1bac4d524122..ebd3497a856f 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 @@ -39,15 +39,15 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); - /// Opens the given [url] in a new window. + /// Opens the given [url] in the specified [webOnlyWindowName]. /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url) { + 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 = - browser.isSafari && _isSafariTargetTopScheme(url) ? '_top' : ''; + + final target = webOnlyWindowName ?? ((browser.isSafari && _isSafariTargetTopScheme(url)) ? '_top' : ''); return _window.open(url, target); } @@ -65,7 +65,8 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, + String webOnlyWindowName, }) { - return Future.value(openNewWindow(url) != null); + 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 727b396ba2e6..e344100577dd 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -4,8 +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.2+1 - +version: 0.1.3 flutter: plugin: platforms: @@ -14,7 +13,11 @@ flutter: fileName: url_launcher_web.dart dependencies: - url_launcher_platform_interface: ^1.0.1 + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_platform_interface platform_detect: ^1.4.0 flutter: sdk: flutter @@ -25,7 +28,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - url_launcher: ^5.2.5 + url_launcher: + path: ../url_launcher pedantic: ^1.8.0 mockito: ^4.1.1 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 b7e107d892cf..70926acae18d 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 @@ -121,7 +121,6 @@ void main() { verify(mockWindow.open('http://www.google.com', '')); }); - test('https urls should be launched in a new window', () { plugin.openNewWindow('https://www.google.com'); @@ -146,6 +145,20 @@ void main() { verify(mockWindow.open('sms:+19725551212?body=hello%20there', '')); }); + test('setting oOnlyLinkTarget as _self opens the url in the same tab', + () { + plugin.openNewWindow("https://www.google.com", + webOnlyWindowName: "_self"); + verify(mockWindow.open('https://www.google.com', '_self')); + }); + + test('setting webOnlyLinkTarget as _blank opens the url in a new tab', + () { + plugin.openNewWindow("https://www.google.com", + webOnlyWindowName: "_blank"); + verify(mockWindow.open('https://www.google.com', '_blank')); + }); + group('Safari', () { setUp(() { platform.configurePlatformForTesting(browser: platform.safari); @@ -181,6 +194,13 @@ void main() { verify( mockWindow.open('sms:+19725551212?body=hello%20there', '_top')); }); + test( + 'mailto urls should use _blank if webOnlyWindowName is set as _blank', + () { + plugin.openNewWindow("mailto:name@mydomain.com", + webOnlyWindowName: "_blank"); + verify(mockWindow.open("mailto:name@mydomain.com", "_blank")); + }); }); }); });