Flutter の Platform 判定を正しく理解する

mono 
Flutter 🇯🇵
Published in
17 min readJun 24, 2022

--

Flutter Interact ’19 での “Flutter Octopus” より

Flutterは、Android・iOS・Web・Windows・macOS・Linux・Fuchsia の7プラットフォームに対応するマルチプラットフォームフレームワークですが、それらの分岐対応などのためにPlatform判定することがあります(Flutterフレームワーク内でしてくれる対応だけで済むことが多く自前で書く機会は少なめですが)。

その際、いくつか判定方法があり、その扱いに迷ったり適当に勘で済ませてしまうこともありがちだと思うので、この記事で体系的に整理しながら解説します。

また、Platformに関する値がそれぞれの実行環境でどうなるのか、カスタマイズ可能な値を弄るとそれがどう作用するのか、を以下のサンプルで試せるように用意したので適宜活用ください。

Platform.isXxx

Web以外の6プラットフォームのどのOS上で動作しているかによって、以下のbool値で判定できます。

実装を追いかけてみたら、この辺りのC++コードで返されたOS文字列との比較判定になっていました。

https://github.com/dart-lang/sdk/blob/c0c0a478f431ad9b11312cf3f8cc2ab1f264639b/runtime/bin/platform.cc#L21-L25
https://github.com/dart-lang/sdk/blob/c0c0a478f431ad9b11312cf3f8cc2ab1f264639b/runtime/bin/platform_macos.cc#L113-L119

--

--