🔗

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

2021/12/03に公開

はじめに

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

Twitter では Flutter を中心とする技術関連の情報を発信しています!
https://twitter.com/marksaito4

お仕事の依頼は以下のメールアドレスまでご連絡をよろしくお願いします。
mark.saito@jp-gx.com

Discussion