Flutter:我可以找出我在哪个平台上吗?

Flutter: can I find out what platform I am on?

我正在开发一个既可以作为应用程序又可以作为网页的项目。我正在使用 flutter_secure_storage 来存储应用程序的本地数据,但我需要一种不同的网络方法。 有没有什么方法可以在运行时找出我在哪个平台上,并相应地选择正确的读写函数?

对于网络,您使用:

if(kIsWeb) //returns a boolean if your app is running in a browser.

对于其他平台,您使用Platform

Platform.isAndroid
Platform.isIos
Platform.isLinux

在调用 Platform.is 之前,请务必先检查您是否在网络上 运行,因为它会抛出平台不适用于此环境的异常。

为了检测 Flutter 是否为 web 编译,您可以使用 package 中的 kIsWeb import 'package:flutter/foundation.dart'。对于 Android、IOS、Windows、Mac 等其他环境,您可以使用 Platform class like

Platform.IsWindows

如何检测 Flutter 应用在​​哪个平台上 运行: Flutter 提供了两种不同的 API,使调用者能够更多地了解当前平台:作为基础库一部分的 kIsWeb 常量和作为平台库一部分的 Platform class。 Link 编码: https://www.flutterclutter.dev/flutter/tutorials/how-to-detect-what-platform-a-flutter-app-is-running-on/2020/127/

 import 'dart:io';
 import 'package:flutter/foundation.dart' show kIsWeb;
 class PlatformInfo {
 bool isDesktopOS() {
  return Platform.isMacOS || Platform.isLinux || Platform.isWindows;
 }
 bool isAppOS() {
 return Platform.isMacOS || Platform.isAndroid;
  }
 bool isWeb() {
 return kIsWeb;
}
 PlatformType getCurrentPlatformType() {
  if (kIsWeb) {
     return PlatformType.Web;
}
  if (Platform.isMacOS) {
  return PlatformType.MacOS;
}
  if (Platform.isFuchsia) {
  return PlatformType.Fuchsia;
}
if (Platform.isLinux) {
  return PlatformType.Linux;
}
if (Platform.isWindows) {
  return PlatformType.Windows;
}
if (Platform.isIOS) {
  return PlatformType.iOS;
}
if (Platform.isAndroid) {
  return PlatformType.Android;
}
return PlatformType.Unknown;
}
}
enum PlatformType {
 Web,
 iOS,
 Android,
 MacOS,
 Fuchsia,
 Linux,
 Windows,
 Unknown
 }

这样可以轻松地根据 OS 或底层平台组做出决策:

Text _getMicrophoneSection() {
 if (PlatformInfo.isAppOS()) {
  return Text('Please tap the microphone button and then permit the              usage');
  }
 return Text('If you have a microphone available, please turn it on');

}

您可以将此扩展文件添加到项目中并在任何对象中调用

target.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; 
  }
  // ···
}

并将其导入任何地方并像这样使用它

@override
  Widget build(BuildContext context) {
    return isAndroid()? Text("Android"):Text("Not Android");
  }