🔗
Flutterのurl_launcherでURLが開けない判定される場合の対処
はじめに
flutterのパッケージurl_launcherを使っていて、URLが開けるはずなのに、
canLaunch(url)
がfalse
になってしまう..
という問題があったので、メモしておこうかなと。
URLが開けなかった原因
そのURLにはカタカナが含まれていました。日本語がURLに含まれているのがおそらく原因だったと思います。
例えばこんな感じに(このURLは存在しません)
https://zenn.dev/articles/url_laucher_canlaunch/テスト1
canLaunch
がfalse
になってしまったら、以下のように、URLをエンコードしてから再度チェックしてみてください。
url_launcher.dart
Future<void> launchUrl(String url) async {
final _canLaunch = await canLaunch(url);
if (_canLaunch) {
final success = await launch(url);
print('success :$success $url');
return;
}
final encodedUrl = Uri.encodeFull(url);
final _canLaunchAgain = await canLaunch(encodedUrl);
if (!_canLaunchAgain) {
print('link launch error $encodedUrl');
return;
}
await launch(encodedUrl);
}
最後に
プロジェクト内に、このようなメソッドを作成して、url_launcherを使用する場合は、この処理をくぐらせるようにしています。
もしプロジェクト内で、canLaunch(url)
とlaunch(url)
をバラバラで使用している場合は、上記のようなコードをメソッド化しておいて、使用すると良いかもしれません。
Discussion