【发布时间】:2018-02-06 01:07:05
【问题描述】:
对于应该在 iOS 和 Android 上略有不同的 UI,即在 不同的平台 上,必须有一种检测应用程序正在运行的方法,但我在文档中找不到它。这是什么?
【问题讨论】:
对于应该在 iOS 和 Android 上略有不同的 UI,即在 不同的平台 上,必须有一种检测应用程序正在运行的方法,但我在文档中找不到它。这是什么?
【问题讨论】:
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 是否有任何先决条件?
kIsWeb,就像我的回答显示的那样,它会正常工作。我刚刚在 Dartpad 网站上验证了这一点。
感谢Collin,最终的答案是:
bool isIOS = Theme.of(context).platform == TargetPlatform.iOS;
【讨论】:
Platform.isIOS
import 'dart:io' show Platform; //at the top
String os = Platform.operatingSystem; //in your code
print(os);
【讨论】:
虽然defaultTargetPlatform 可以,但我建议使用Theme.of(context).targetPlatform。这可以测试 iOS 行为(因为 defaultTargetPlatform 在测试中始终是 TargetPlatform.android)。它还允许您的小部件的祖先通过将其包装在 Theme 小部件中来覆盖其目标平台。
【讨论】:
if (Platform.isIOS) {//my iOS widgets}有什么区别@
Platform.isIOS 和defaultTargetPlatform 有同样的问题。它在测试中不起作用,并且不能被 Theme 小部件覆盖。
很简单,只需要导入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(),
【讨论】:
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
【讨论】:
大多数“颤振”的答案如下:
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
【讨论】:
你可以的
defaultTargetPlatform == TargetPlatform.iOS
? kIOSTheme
: kDefaultTheme,
来自import 'package:flutter/foundation.dart';
【讨论】:
对于网络和应用程序更简单的方法。试试这个
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());
【讨论】:
您可以将此扩展文件添加到项目中并调用任何对象
import 'dart:io';
import 'package:flutter/foundation.dart' show kIsWeb;
extension Target on Object {
bool isAndroid() {
return Platform.isAndroid;
}
bool isIOS() {
return Platform.isIOS;
}
bool isLinux() {
return Platform.isLinux;
}
bool isWindows() {
return Platform.isWindows;
}
bool isMacOS() {
return Platform.isMacOS;
}
bool isWeb() {
return kIsWeb;
}
// ···
}
只需导入文件并调用它
@override
Widget build(BuildContext context) {
return isAndroid()? Text("Android"):Text("Not Android");
}
【讨论】:
import 'dart:io' as io;
if(io.Platform.isAndroid){
doSomething();
}else {
doSomethingElse();
}
【讨论】:
您可以使用通用平台包:
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');
【讨论】:
所以这里有一个小实用程序,我用来检测平台和操作系统是否适当地反应。
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 }
【讨论】:
如果您只需要一个字符串来记录日志,您可以使用Platform.operatingSystem,它将操作系统名称作为小写字符串返回。
import 'dart:io';
import 'package:flutter/foundation.dart';
String _getPlatform() {
if (kIsWeb) return 'web';
return Platform.operatingSystem;
}
【讨论】: