对于在iOS和Android上略有不同的UI,即在不同的平台上,必须有一种方法来检测应用程序在哪个平台上运行,但我在文档中找不到它。是什么?
当前回答
您可以将此扩展添加到项目中
import 'package:flutter/material.dart';
extension PlatformExtension on BuildContext {
bool get isMobile =>
Theme.of(this).platform == TargetPlatform.iOS ||
Theme.of(this).platform == TargetPlatform.android;
bool get isDesktop =>
Theme.of(this).platform == TargetPlatform.macOS ||
Theme.of(this).platform == TargetPlatform.windows ||
Theme.of(this).platform == TargetPlatform.linux;
}
extension TargetPlatformExtension on TargetPlatform {
bool get isMobile =>
this == TargetPlatform.iOS || this == TargetPlatform.android;
bool get isDesktop =>
this == TargetPlatform.linux ||
this == TargetPlatform.macOS ||
this == TargetPlatform.windows;
}
现在您可以使用。
内置context => context.isDesktop 目标平台=> defaulttarded平台
建议从上下文访问平台。
要检测您的应用程序是否在浏览器上运行,您可以轻松地使用基础库中的kIsWeb常量。
import 'package:flutter/foundation.dart';
log('$kIsWeb'); // will print true if the app is running on a browser
注意,如果你在桌面上运行web应用程序,isDesktop getter将返回true,对于移动平台也是如此。 为了避免这种情况。
import 'package:flutter/foundation.dart';
if (!kIsWeb && defaultTargetPlatform.isDesktop) {
// do stuff for desktop apps only
}
if (!kIsWeb && defaultTargetPlatform.isMobile) {
// do stuff for mobile apps only
}
您可以修改扩展以获得您喜欢的实现。
其他回答
import 'dart:io' as io;
if(io.Platform.isAndroid){
doSomething();
}else {
doSomethingElse();
}
你可以这样做
defaultTargetPlatform == TargetPlatform.iOS
? kIOSTheme
: kDefaultTheme,
从导入'包:flutter/foundation.dart';
虽然defaultTargetPlatform可以工作,但我建议使用Theme.of(context). targetplatform。这样可以测试iOS行为(因为defaultTargetPlatform总是TargetPlatform)。Android正在测试中)。它还允许小部件的祖先通过将其包装在Theme小部件中来覆盖其目标平台。
所以这里有一个小工具,我用来检测平台和操作系统的反应适当。
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 }
Dart主机平台检查。
导入'dart:io'作为io;
_checkingHostPlatform(){
if(IO.Platform.isAndroid){
//Execute code for android
}else if(IO.Platform.isIOS){
//Execute code for iOS
}else{
//Execute code for other platforms
}
}