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
最佳实践
- 功能检测:尽可能优先使用功能检测而不是操作系统检查
- 空安全:在访问环境变量之前检查其是否存在
- Web 兼容性:请记住,Platform 在浏览器中不起作用
- 测试:彻底测试特定于平台的代码路径
来源
本教程通过实际示例介绍了 Dart 的 Platform 类,展示了平台检测、环境访问和特定于平台的代码执行。
作者
列出 所有 Dart 教程。