如何从Dart代码中检测主机平台?

时间:2017-08-28 17:31:17

标签: dart flutter

对于iOSAndroid应略有不同的用户界面,必须有一种方法可以检测您正在运行哪个,但我无法在文档中找到它。它是什么?

12 个答案:

答案 0 :(得分:68)

import 'dart:io' show Platform;

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

其他选择包括:

Platform.isFuchsia
Platform.isLinux
Platform.isMacOS
Platform.isWindows

文档:https://docs.flutter.io/flutter/dart-io/Platform-class.html

答案 1 :(得分:35)

感谢Collin,最后的答案是:

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

答案 2 :(得分:16)

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

不要忘记导入 IO 库。

import 'dart:io';

如果您在同一个文件中也使用 import 'dart:html';,那么您必须指定平台定义,因为两个库都有“平台”的定义

在这种情况下,请使用如下所示的平台特定代码:

import 'dart:io' as IO;
import 'dart:html';

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

如果您正在正确研究平台集成,我建议在 Flutter 站点上使用完整示例: https://flutter.dev/docs/development/platform-integration/platform-channels

答案 3 :(得分:15)

很简单,只需导入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(),

答案 4 :(得分:13)

虽然defaultTargetPlatform可行,但我建议使用Theme.of(context).targetPlatform。这样可以测试iOS行为(因为defaultTargetPlatform在测试中总是TargetPlatform.android。它还允许窗口小部件的祖先通过将其包装在Theme窗口小部件中来覆盖其目标平台。

答案 5 :(得分:8)

你可以做到

defaultTargetPlatform == TargetPlatform.iOS
          ? kIOSTheme
          : kDefaultTheme,

来自import 'package:flutter/foundation.dart';

答案 6 :(得分:5)

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

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

;

答案 7 :(得分:3)

import 'dart:io' as io;

if(io.Platform.isAndroid){
 doSomething();
}else {
 doSomethingElse();
}

答案 8 :(得分:2)

大多数“扑”的答案如下:

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 :(得分:2)

您可以使用通用平台软件包:

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');

答案 10 :(得分:0)

为网络和应用提供更简单的方式。请尝试

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


var platformName = '';
if (kIsWeb) {
  platformName = "Web";
} else {
  if (Platform.isAndroid) {
    platformName = "Android";
  } else if (Platform.isIOS) {
    platformName = "IOS";
  } else if (Platform.isFuchsia) {
    platformName = "Fuchsia";
  } else if (Platform.isLinux) {
    platformName = "Linux";
  } else if (Platform.isMacOS) {
    platformName = "MacOS";
  } else if (Platform.isWindows) {
    platformName = "Windows";
  }
}
print("platformName :- "+platformName.toString());

答案 11 :(得分:0)

所以这里有一个小工具,我用来检测平台和操作系统是否适当。

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

class Util {

  os getPlatform() {
    if (kIsWeb) {
      return os.Web;
    } else if (Platform.isIOS) {
      return os.IOS;
    } else if (Platform.isAndroid) {
      return os.Android;
    } else if (Platform.isFuchsia) {
      return os.Fuchsia;
    } else if (Platform.isLinux) {
      return os.Linux;
    } else if (Platform.isMacOS) {
      return os.MacOS;
    } else if (Platform.isWindows) {
      return os.Windows;
    }
    return os.Unknown;
  }

  bool isWeb() {
    return (getPlatform()==os.Web);
  }

  bool isMobile() {
    os platform = getPlatform();
    return (platform == os.Android || platform == os.IOS || platform== os.Fuchsia);
  }

  bool isComputer() {
    os platform = getPlatform();
    return (platform == os.Linux || platform == os.MacOS || platform== os.Windows);
  }

}

enum os { Unknown, Web, Android, Fuchsia, IOS, Linux, MacOS, Windows }