🔗

Flutterのurl_launcherでURLが開けない判定される場合の対処

1 min read

はじめに

flutterのパッケージurl_launcherを使っていて、URLが開けるはずなのに、
canLaunch(url)falseになってしまう..
という問題があったので、メモしておこうかなと。

https://pub.dev/packages/url_launcher

URLが開けなかった原因

そのURLにはカタカナが含まれていました。日本語がURLに含まれているのがおそらく原因だったと思います。
例えばこんな感じに(このURLは存在しません)
https://zenn.dev/articles/url_laucher_canlaunch/テスト1

canLaunchfalseになってしまったら、以下のように、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)をバラバラで使用している場合は、上記のようなコードをメソッド化しておいて、使用すると良いかもしれません。

GitHubで編集を提案

Discussion

ログインするとコメントできます