current static method
Returns a representation of the current dart virtual machine platform abi.
Implementation
static Platform current() {
final String architectureName =
io.Platform.version.split("\"")[1].split("_")[0];
if (io.Platform.isWindows) {
final WindowsArchitecture architecture = switch (architectureName) {
"x64" => WindowsArchitecture.x64,
"ia32" => WindowsArchitecture.x86,
"arm" => WindowsArchitecture.ARM,
"arm64" => WindowsArchitecture.ARM64,
_ => WindowsArchitecture.x64,
};
final String osVersionString = io.Platform.operatingSystemVersion.split("\"").last;
final RegExpMatch? buildMatch = RegExp(r'Build (\d+)')
.firstMatch(osVersionString);
final int buildNumber =
buildMatch != null ? int.tryParse(buildMatch.group(1)!) ?? 0 : 0;
final version = Version.parse(osVersionString);
return Platform.windows(
architecture: architecture,
buildVersion: WindowsBuildVersion(buildNumber, version),
);
}
if (io.Platform.isLinux) {
final LinuxArchitecture architecture = switch (architectureName) {
"x64" => LinuxArchitecture.x86_64,
"ia32" => LinuxArchitecture.x86,
"arm" => LinuxArchitecture.arm,
"arm64" => LinuxArchitecture.aarch64,
"riscv" => LinuxArchitecture.riscv,
"riscv64" => LinuxArchitecture.riscv64,
_ => LinuxArchitecture.x86_64,
};
return Platform.linux(architecture: architecture);
}
if (io.Platform.isMacOS) {
final MacOSProcessor processor = switch (architectureName) {
"x64" => MacOSProcessor.intel,
"arm64" => MacOSProcessor.applesilicon,
_ => MacOSProcessor.intel,
};
return Platform.macos(
processor: processor,
sdkVersion: Version.parse(io.Platform.operatingSystemVersion),
);
}
if (io.Platform.isAndroid) {
final AndroidABI abi = switch (architectureName) {
"x64" => AndroidABI.x86_64,
"ia32" => AndroidABI.x86,
"arm" => AndroidABI.armeabi_v7a,
"arm64" => AndroidABI.arm64_v8a,
_ => AndroidABI.arm64_v8a,
};
return Platform.android(
apiLevel:
AndroidAPI(0, Version.parse(io.Platform.operatingSystemVersion)),
abi: abi,
);
}
if (io.Platform.isIOS) {
return Platform.ios(
sdkVersion: Version.parse(io.Platform.operatingSystemVersion));
}
return Platform.bareMetal(
architecture: switch (architectureName) {
"x64" => Architecture.amd64,
"ia32" => Architecture.x86,
"arm" => Architecture.arm,
"arm64" => Architecture.aarch64,
"riscv" => Architecture.riscv32,
"riscv64" => Architecture.riscv64,
_ => Architecture.amd64,
},
);
}