ZetCode

Dart 平台

最后修改于 2025 年 4 月 4 日

Dart 中的 Platform 类提供了有关当前平台和环境的信息。它对于编写跨平台应用程序非常有用。

Platform 可以检测操作系统、可执行文件路径、环境变量等。它是 Dart 的 dart:io 库的一部分,用于服务器端应用。

基本定义

Platform 是一个静态类,它公开了特定于平台的属性。它有助于编写适应不同操作系统和环境的代码。

主要功能包括操作系统检测、路径解析和环境变量访问。请注意,它仅在 Dart 命令行应用程序中有效,在浏览器中无效。

检测操作系统

此示例展示了如何检测当前操作系统。

main.dart
import 'dart:io';

void main() {
  print('Operating system: ${Platform.operatingSystem}');
  print('OS version: ${Platform.operatingSystemVersion}');
  
  if (Platform.isWindows) {
    print('Running on Windows');
  } else if (Platform.isLinux) {
    print('Running on Linux');
  } else if (Platform.isMacOS) {
    print('Running on macOS');
  }
}

我们使用 Platform 属性来检测操作系统。isWindows、isLinux 和 isMacOS getter 提供了方便的布尔值检查,用于常见的平台。

$ dart main.dart
Operating system: linux
OS version: 5.15.0-76-generic
Running on Linux

访问环境变量

此示例演示了如何访问系统环境变量。

main.dart
import 'dart:io';

void main() {
  final envVars = Platform.environment;
  
  print('PATH: ${envVars['PATH']}');
  print('HOME: ${envVars['HOME']}');
  print('USER: ${envVars['USER']}');
  
  if (envVars.containsKey('FLUTTER_ROOT')) {
    print('Flutter SDK: ${envVars['FLUTTER_ROOT']}');
  }
}

Platform.environment 提供了一个包含所有环境变量的映射。我们可以访问特定变量或在访问它们之前检查其是否存在。

$ dart main.dart
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
HOME: /home/user
USER: user

获取可执行文件信息

此示例展示了如何获取有关正在运行的可执行文件的信息。

main.dart
import 'dart:io';

void main() {
  print('Executable: ${Platform.executable}');
  print('Executable arguments: ${Platform.executableArguments}');
  print('Script path: ${Platform.script.path}');
  print('Resolved script path: ${Platform.resolvedExecutable}');
  
  print('Dart version: ${Platform.version}');
}

这些属性有助于识别 Dart 运行时和脚本位置。对于日志记录、调试或需要相对于可执行文件解析路径时很有用。

$ dart main.dart
Executable: /usr/bin/dart
Executable arguments: []
Script path: /home/user/main.dart
Resolved script path: /usr/bin/dart
Dart version: 2.19.0 (stable)

检查平台区域设置

此示例演示了如何检查平台的区域设置。

main.dart
import 'dart:io';

void main() {
  final locale = Platform.localeName;
  print('System locale: $locale');
  
  final locales = Platform.localeName.split('_');
  final language = locales[0];
  final country = locales.length > 1 ? locales[1] : 'Unknown';
  
  print('Language: $language');
  print('Country: $country');
}

Platform.localeName 以 language_COUNTRY 格式返回系统区域设置。我们将其拆分以获取单独的语言和国家/地区组件,用于本地化。

$ dart main.dart
System locale: en_US
Language: en
Country: US

特定于平台的代码执行

此示例展示了如何执行特定于平台的代码路径。

main.dart
import 'dart:io';

String getPlatformSpecificMessage() {
  if (Platform.isWindows) {
    return 'Hello Windows user!';
  } else if (Platform.isMacOS) {
    return 'Hello macOS user!';
  } else if (Platform.isLinux) {
    return 'Hello Linux user!';
  } else if (Platform.isAndroid) {
    return 'Hello Android user!';
  } else if (Platform.isIOS) {
    return 'Hello iOS user!';
  }
  return 'Hello unknown platform user!';
}

void main() {
  print(getPlatformSpecificMessage());
  print('Number of processors: ${Platform.numberOfProcessors}');
}

我们使用 Platform 检查来为不同平台定制行为。还展示了 numberOfProcessors,它有助于并行任务分发。

$ dart main.dart
Hello Linux user!
Number of processors: 8

最佳实践

来源

Dart 平台文档

本教程通过实际示例介绍了 Dart 的 Platform 类,展示了平台检测、环境访问和特定于平台的代码执行。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Dart 教程