Dart 코드에서 호스트 플랫폼을 어떻게 감지합니까?


140

iOSAndroid 에서 약간 다른 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응용 프로그램이 웹에서 실행되도록 컴파일되었는지 여부를 나타내는 전역 상수 인을 사용하여 웹에서 실행 중인지 감지 할 수도 있습니다 .

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

4
이것은 단순함과 가독성을 위해 받아 들여진 대답이어야합니다.
Andrew Steinmetz

당신은 클래스, 클래스 didnt 한 작업에 직접 전화하는 방법에 Platform.isAndroid 전화를해야 @NatoBoram
의 Jabir 이샤

67

Collin 덕분에 최종 답변은 다음과 같습니다.

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

3
이 답변 만이 최신 Flutter 프레임 워크에서 최신입니다. 나머지 응답은 잘못 아니지만 defaultTargetPlatform 프레임 워크의 더 이상 일부가 될 것 같다
Stoycho 안드리을

21

defaultTargetPlatform작동 하지만 Theme.of(context).targetPlatform. 이를 통해 iOS 동작을 테스트 할 수 있습니다 ( defaultTargetPlatform항상 TargetPlatform.android테스트 중이므로 ). 또한 위젯의 조상이 위젯으로 래핑하여 대상 플랫폼을 재정의 할 수 있습니다 Theme.


1
나는이 제안이 무슨 차이가 뭔지 여쭤봐도 될까요 if (Platform.isIOS) {//my iOS widgets}
아지자

3
Platform.isIOS와 같은 문제가 defaultTargetPlatform있습니다. 테스트에서 작동하지 않으며 Theme위젯 으로 덮어 쓸 수 없습니다 .
Collin Jackson

이제 debugDefaultTargetPlatformOverride api.flutter.dev/flutter/foundation/…을 사용
Yuwen Yan

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

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

10

대부분의 "Flutter"대답은 다음과 같습니다.

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. Pedan

1
어제 게시물에 추가 한 가져 오기와 함께있을 수 있습니다. : D
I. Pedan

0

Universal Platform 패키지를 사용할 수 있습니다.

https://pub.dev/packages/universal_platform

import 'package:universal_platform/universal_platform.dart';

bool isIos = UniversalPlatform.isIOS;
bool isAndroid = UniversalPlatform.isAndroid;
bool isWeb = UniversalPlatform.isWeb;
print('iOS: $isIos');
print('Android: $isAndroid');
print('Web: $isWeb');

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.