Platform Detail
About
Platform Detail is a lightweight and developer-friendly Flutter package that makes platform detection easier, more complete, and cross-platform.
It provides a unified and consistent API for checking the platform your app is running on — including web, something that native Flutter classes like TargetPlatform and Platform from dart:io don't currently support.
⚠️ Flutter’s native
PlatformandTargetPlatformdo not provide support for detecting web, which can be a limitation in universal apps.
✅platform_detailaddresses this limitation by introducing a simple and intuitive API that includes web detection out of the box.
✅ Why Use This Package?
- ✅ Unified API across all platforms (including web).
- ✅ Clear separation between platform type and platform group.
- ✅ Singleton behavior via factory constructor.
- ✅ No need to manually check kIsWebor rely on partial solutions.
- ✅ Detect private and public IP addresses.
- ✅ Detect device theme (light or dark).
Getting Started
The recommended way to use the library is to call the static members of the PlatformDetail class.
Thanks to a factory constructor, multiple instances are not created — a singleton is used internally.
🔍 Basic Usage
✔️ Detecting Platform Type
import 'package:platform_detail/platform_detail.dart';
void main() {
  PlatformType platform = PlatformDetail.currentPlatform;
  print('This platform is: $platform'); // e.g., PlatformType.android
}
🌐 Why use PlatformType?
If you only rely on TargetPlatform, you’ll miss web support.
void main() {
  // Native TargetPlatform doesn't detect web:
  if (defaultTargetPlatform == TargetPlatform.android) {
    // OK for Android
  } else if (kIsWeb) {
    // Web has to be checked manually
  }
}
With PlatformDetail, the check is unified:
void main() {
  if (PlatformDetail.isWeb) {
    print('Web detected ✔️');
  }
}
🔎 Group-based Detection
Check whether the current platform belongs to a broader category:
void main() {
  if (PlatformDetail.isMobile) {
    print('Mobile platform');
  }
  if (PlatformDetail.isDesktop) {
    print('Desktop platform');
  }
  if (PlatformDetail.isDesktopOrWeb) {
    print('Desktop or Web platform');
  }
}
Or use the PlatformGroup enum directly:
void main() {
  switch (PlatformDetail.currentGroupPlatform) {
    case PlatformGroup.mobile:
      print('Mobile');
      break;
    case PlatformGroup.web:
      print('Web');
      break;
    case PlatformGroup.desktop:
      print('Desktop');
      break;
  }
}
🎯 Detecting Specific Platforms
void main() {
  if (PlatformDetail.isIOS) print('iOS');
  if (PlatformDetail.isAndroid) print('Android');
  if (PlatformDetail.isFuchsia) print('Fuchsia');
  if (PlatformDetail.isWindows) print('Windows');
  if (PlatformDetail.isLinux) print('Linux');
  if (PlatformDetail.isMacOS) print('macOS');
  if (PlatformDetail.isWeb) print('Web');
}
Or create different cases through the enum with a switch:
void main() {
  switch (PlatformDetail.currentPlatform) {
    case PlatformType.android:
      print('Android');
    case PlatformType.iOS:
      print('iOS');
    case PlatformType.isFuchsia:
      print('Fuchsia');
    case PlatformType.Windows:
      print('Windows');
    case PlatformType.Linux:
      print('Linux');
    case PlatformType.macOS:
      print('macOS');
    case PlatformType.Web:
      print('Web');
  }
}
🌐 Detecting IPs
You can detect the private IP of the device:
void main() async {
  final List<String> privateIps = await PlatformDetail.getPrivateIp;
}
You can also detect the public IP of the device:
void main() async {
  final String publicIp = await PlatformDetail.getPublicIp;
}
ℹ️ No configuration is required for most platforms.
For macOS, you must add the following entry to bothDebugProfile.entitlementsandReleaseProfile.entitlementsfiles:
<key>com.apple.security.network.client</key>
<true/>
Get a device description
If you need more detailed information about the device and operating system it is running on.
void main() async {
  final descriptionDevice = await PlatformDetail.deviceInfo();
}
Or maybe you need an information string about the device info:
void main() async {
  final descriptionDevice = await PlatformDetail.deviceInfoDetails();
}
This will return something like this:
- Android: Android 9 (SDK 28), Xiaomi Redmi Note 7
- iOS: iOS 13.1, iPhone 11 Pro Max iPhone
- Web: Google Chrome (115.0.5790.170)
- Linux: Fedora 17 (Beefy Miracle)
- Windows: Windows 10 Home (1903)
- MacOS: macOS 13.5, MacBook Pro
Light/Dark Mode
You can detect too if the device is configured in light or dark mode:
void main() {
  if (PlatformDetail.isLightMode) {
    print('The current platform is configured with light mode');
  }
  if (PlatformDetail.isDarkMode) {
    print('The current platform is configured with dark mode');
  }
}
Also, you can use the DeviceTheme enum for this:
void main() {
  if (PlatformDetail.theme == DeviceTheme.light) {
    print('The current device is configured in light mode');
  }
  if (PlatformDetail.theme == DeviceTheme.dark) {
    print('The current device is configured in dark mode');
  }
}
