🌐
[Flutter web] dart:io を web で読まないプラットフォーム判定
軽く調べても、いまいち望みの結果が得られなかったので取り急ぎメモします。
結論
web を含む環境で Android 判定をしたい場合は以下のようにすると楽かもしれません。
!kIsWeb && Platform.isAndroid
背景
Android と iOS だけに対応した Flutter アプリを web でも動かしたくなった場合、dart:ioを利用することができません。
Important: Browser-based apps can't use this library.
実際に Platform.isAndroid
のようなコードでは以下の実行時エラーが投げられます。
Unsupported operation: Platform._operatingSystem
解決策
universal_platform というパッケージがあります。これで UniversalPlatform.isAndroid
のようなコードが web 環境でも使えるようになります。ただ、これはサードパーティ製のパッケージなので若干のアレルギーを発症する方も多いと思います。
そういう場合のシンプルな解決策は演算子の短絡評価の特性を用いて Platform.isAndroid
のコードを web 環境で実行されないようにすることです。例えば論理積演算子(&&
)を用いる場合は、web の場合だけ左辺で評価が終了するようにしておいて右辺の Platform.isAndroid
を評価しないようにします。これは Android のみ真になる式です。
!kIsWeb && Platform.isAndroid
web または Android といった論理和判定も、論理和演算子は左辺が真の場合に右辺を評価しないので書くことができます。
kIsWeb || Platform.isAndroid
以上です。
Discussion