getDeviceInfo static method

Future<DeviceInfo> getDeviceInfo()

Static method to gather device information for all supported platforms.

Implementation

static Future<DeviceInfo> getDeviceInfo() async {
  final deviceInfoPlugin = DeviceInfoPlugin();

  if (kIsWeb) {
    final webInfo = await deviceInfoPlugin.webBrowserInfo;
    return DeviceInfo(
      deviceName: webInfo.browserName.name,
      deviceModel: webInfo.vendor ?? "Unknown Vendor",
      operatingSystem: "Web",
      systemVersion: webInfo.userAgent ?? "Unknown UserAgent",
      deviceUuid: "Unavailable on Web",
      isPhysicalDevice: false,
    );
  } else if (Platform.isAndroid) {
    final androidInfo = await deviceInfoPlugin.androidInfo;
    return DeviceInfo(
      deviceName: androidInfo.device,
      deviceModel: androidInfo.model,
      operatingSystem: "Android",
      systemVersion: androidInfo.version.release,
      deviceUuid: androidInfo.id,
      isPhysicalDevice: androidInfo.isPhysicalDevice,
    );
  } else if (Platform.isIOS) {
    final iosInfo = await deviceInfoPlugin.iosInfo;
    return DeviceInfo(
      deviceName: iosInfo.name,
      deviceModel: iosInfo.model,
      operatingSystem: "iOS",
      systemVersion: iosInfo.systemVersion,
      deviceUuid: iosInfo.identifierForVendor ?? "Unknown UUID",
      isPhysicalDevice: iosInfo.isPhysicalDevice,
    );
  } else if (Platform.isMacOS) {
    final macInfo = await deviceInfoPlugin.macOsInfo;
    return DeviceInfo(
      deviceName: macInfo.computerName,
      deviceModel: "Mac", // macOS does not provide specific model information
      operatingSystem: "macOS",
      systemVersion: macInfo.osRelease,
      deviceUuid: "Unavailable on macOS",
      isPhysicalDevice: true,
    );
  } else if (Platform.isWindows) {
    final windowsInfo = await deviceInfoPlugin.windowsInfo;
    return DeviceInfo(
      deviceName: windowsInfo.computerName,
      deviceModel:
          "Windows Device", // Windows does not provide specific model information
      operatingSystem: "Windows",
      systemVersion: windowsInfo.productName,
      deviceUuid: "Unavailable on Windows",
      isPhysicalDevice: true,
    );
  } else if (Platform.isLinux) {
    final linuxInfo = await deviceInfoPlugin.linuxInfo;
    return DeviceInfo(
      deviceName: linuxInfo.name,
      deviceModel: linuxInfo.prettyName,
      operatingSystem: "Linux",
      systemVersion: linuxInfo.version ?? "Unknown Version",
      deviceUuid: "Unavailable on Linux",
      isPhysicalDevice: true,
    );
  } else {
    throw UnsupportedError("Unsupported platform");
  }
}