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,
    },
  );
}