url_launcherの使い方

Flutterのプラグイン「url_launcher」のお話です。
目次
url_launcherとは?

Flutterのプラグインです。
外部リンクを設置することができます。
使い方
install
flutter pub add url_launcher
VSCodeのターミナルで実行します。
pubspec.yamlファイルを確認します。
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
url_launcher: ^6.3.1
Version 6.3.1 がインストールされました。
Import
import 'package:url_launcher/url_launcher.dart';
今回は、main.dartにimport文を追加しておきましょう。
実装
公式サンプルの例
final Uri _url = Uri.parse('https://www.jinmusoftware.com/');
Future<void> _launchUrl() async {
if (!await launchUrl(_url)) {
throw Exception('Could not launch $_url');
}
}
デフォルトだと内部ブラウザのようなものが起動します。
外部ブラウザを起動する場合は「mode」を指定する必要があります。
では、modeに ”externalApplication” を指定してみましょう。
final Uri _url = Uri.parse('https://www.jinmusoftware.com/');
Future<void> _launchUrl() async {
if (!await launchUrl(
_url,
mode: LaunchMode.externalApplication,
)) {
throw Exception('Could not launch $_url');
}
}
これで外部ブラウザが起動するようになりました。
説明
Uri
https://api.flutter.dev/flutter/dart-core/Uri-class.html
final Uri _url = Uri.parse('https://www.jinmusoftware.com/');
url文字列はそのまま使用せず、uriオブジェクトを作成します。
uriオブジェクトはurl文字列を扱いやすくしてくれますね。
以下のようなプロパティにアクセスできます。
- uri.scheme -> https
- uri.host -> www.jinmusoftware.com
launchUrl
Future<bool> launchUrl(
Uri url, {
LaunchMode mode = LaunchMode.platformDefault,
WebViewConfiguration webViewConfiguration = const WebViewConfiguration(),
BrowserConfiguration browserConfiguration = const BrowserConfiguration(),
String? webOnlyWindowName,
})
返り値
bool型です。ブラウザが無事起動できたらtrueを返します。
失敗したら、falseを返すか、例外(PlatformException)を投げてきます。
Uri
uriオブジェクトが必要です。
LaunchMode
LaunchModeプロパティには、ブラウザの起動方法を指示します。
- platformDefault:urlの起動方法はプラットフォームに任せる
- inAppWebView:アプリ内のWebビュー
- inAppBrowserView:アプリ内のブラウザビュー
- externalApplication:外部ブラウザ
- externalNonBrowserApplication:ブラウザ以外の外部アプリ
WebViewConfiguration
起動ブラウザの制限を設定します。
- JavaScript
- DomStrage
- 追加のヘッダー
BrowserConfiguration
Web ページのタイトルを表示するかどうか
webOnlyWindowName
新しいタブで開くか、既存タブで開くか
これはWebページと同じですね。
- “_blank” :opens the new URL in a new tab.
- “_self” :opens the new URL in the current tab.
コード例
今回のコードでは、端末側のデフォルトのブラウザ(外部ブラウザ)で起動したい為に、次のような引数を指定しました。
launchUrl(
_url,
mode: LaunchMode.externalApplication,
)
補足
どこで使用できるのか?
ボタン等のWidgetで使用できます。
クリックしたらブラウザを開くようにするには、onPressedや, onTap, などに記述します。
- GestureDetector…onTap
- Inkwell…onTap
- ElevatedButton…onPressed
- FloatingActionButton…onPressed
- などなど
ブラウザを開きたいだけだがSchemeの設定が必要なのか?
公式ページを確認すると、sms、tellなどの場合は、追加の設定が必要ですが、httpsの場合は不要です。
iOS,Simulatorではそこそこエラーがでます
ブラウザを開いて、表示しきる前に戻ると、launchUrlはfalseを返したり例外を投げてきます。
そうなると調子が悪くなりブラウザの挙動がおかしくなります。この場合は、Erase All Content and Setting… を実行してみましょう。
- Simulator -> Device -> Erase All Content and Setting,,,
テスト中は軽いページのurlにしておくのがよきでしょう。
おわり