对于在iOS和Android上略有不同的UI,即在不同的平台上,必须有一种方法来检测应用程序在哪个平台上运行,但我在文档中找不到它。是什么?
当前回答
导入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(),
其他回答
您可以将此扩展添加到项目中
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
}
您可以修改扩展以获得您喜欢的实现。
您可以使用通用平台包:
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; //at the top
String os = Platform.operatingSystem; //in your code
print(os);
您可以将这个扩展文件(platform_ext.dart)添加到项目中并调用任何对象
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;
}
// ···
}
只需导入文件并调用它
import 'platform_ext.dart';
....
@override
Widget build(BuildContext context) {
return isAndroid()? Text("Android"):Text("Not Android");
}
这个自定义创建的类将帮助您检测平台:
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
enum Os {
web,
android,
ios,
macOS,
linux,
windows,
fuchsia,
}
class Platform {
const Platform();
/// Platform is Web.
static bool get isWeb => os == Os.web;
/// Platform is Android.
static bool get isAndroid => os == Os.android;
/// Platform is IOS.
static bool get isIOS => os == Os.ios;
/// Platform is Fuchsia.
static bool get isFuchsia => os == Os.fuchsia;
/// Platform is Linux.
static bool get isLinux => os == Os.linux;
/// Platform is MacOS.
static bool get isMacOS => os == Os.macOS;
/// Platform is Windows.
static bool get isWindows => os == Os.windows;
/// Platform is Android or IOS.
static bool get isMobile => isAndroid || isIOS;
/// Platform is Android or IOS or Fuchsia.
static bool get isFullMobile => isMobile || isFuchsia;
/// Platform is Linux or Windows or MacOS.
static bool get isDesktop => isLinux || isWindows || isMacOS;
/// Getting the os name.
static Os get os {
if (kIsWeb) {
return Os.web;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
return Os.android;
case TargetPlatform.iOS:
return Os.ios;
case TargetPlatform.macOS:
return Os.macOS;
case TargetPlatform.windows:
return Os.windows;
case TargetPlatform.fuchsia:
return Os.fuchsia;
case TargetPlatform.linux:
return Os.linux;
}
}
}