Dartコードからホストプラットフォームをどのように検出しますか?


140

iOSAndroid、つまりプラットフォームが異なるUIの場合、アプリが実行されているUI を検出する方法が必要ですが、ドキュメントでそれを見つけることができませんでした。それは何ですか?

回答:


336
import 'dart:io' show Platform;

if (Platform.isAndroid) {
  // Android-specific code
} else if (Platform.isIOS) {
  // iOS-specific code
}

すべてのオプションは次のとおりです。

Platform.isAndroid
Platform.isFuchsia
Platform.isIOS
Platform.isLinux
Platform.isMacOS
Platform.isWindows

kIsWebアプリケーションがWeb上で実行するようにコンパイルされているかどうかを示すグローバル定数であるを使用して、Web上で実行しているかどうかを検出することもできます。

import 'package:flutter/foundation.dart' show kIsWeb;

if (kIsWeb) {
  // running on the web!
} else {
  // NOT running on the web! You can check for additional platforms here.
}

Undefined name 'Platform'.dart(undefined_identifier)使用するための必要条件はありますPlatformか?
NatoBoram

4
必要なインポートを含めるように回答を更新しました。
Westy92、19年

4
シンプルさと読みやすさから、これは受け入れられる答えになるはずです。
Andrew Steinmetz

@NatoBoramクラスのメソッドでPlatform.isAndroidを呼び出す必要があります。クラスでの直接呼び出しは機能しませんでした
Jabir Ishaq

67

コリンのおかげで、最終的な答えは次のとおりです。

bool isIOS = Theme.of(context).platform == TargetPlatform.iOS;

3
この回答のみが、最新のFlutterフレームワークで最新です。残りの答えは間違っていませんが、defaultTargetPlatformはフレームワークの一部ではなくなっているようです
Stoycho Andreev

21

機能しますdefaultTargetPlatformが、の使用をお勧めしTheme.of(context).targetPlatformます。これにより、iOSの動作のテストが可能になります(defaultTargetPlatform常にTargetPlatform.androidテスト中であるため)。また、ウィジェットの祖先がウィジェットにラップすることにより、ターゲットプラットフォームをオーバーライドできThemeます。


1
月、私は何を提案し、これとの違いは何であるか尋ねる if (Platform.isIOS) {//my iOS widgets}
アジザ

3
Platform.isIOSと同じ問題がありdefaultTargetPlatformます。テストでは機能せず、Themeウィジェットで上書きできません。
コリンジャクソン

今、あなたはdebugDefaultTargetPlatformOverrideのでユニットテストでdefaultTargetPlatformを上書きすることができますapi.flutter.dev/flutter/foundation/...
宇文ヤン

20
import 'dart:io' show Platform;  //at the top

String os = Platform.operatingSystem; //in your code
print(os);

10

ほとんどの「フラッター」の答えは次のとおりです。

import 'package:flutter/foundation.dart' show TargetPlatform;

//...

if(Theme.of(context).platform == TargetPlatform.android)
    //do sth for Android
else if(Theme.of(context).platform == TargetPlatform.iOS)
    //do sth else for iOS
else if(Theme.of(context).platform == TargetPlatform.fuchsia)
    //even do sth else for Fuchsia OS

9

できるよ

defaultTargetPlatform == TargetPlatform.iOS
          ? kIOSTheme
          : kDefaultTheme,

から import 'package:flutter/foundation.dart';


それはもう機能しません。defaultTargetPlatformを取得できませんでした。
I.

1
昨日投稿に追加したインポートを使用する場合があります。:D
I. Pedan 2019


0

ioライブラリをインポートするだけです。

import'dart:io' show Platform;
void main(){
if(Platform.isIOS){
  return someThing();
}else if(Platform.isAndroid){
  return otherThing();
}else if(Platform.isMacOS){
  return anotherThing();
}

または非常に簡単な方法で

Platform.isIOS ? someThing() : anOther(),

1
これが正解です。エラーが発生するため、コードからdart:HTMLインポートを削除するだけです。
タイラーパウエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.