platform_detail 5.1.0
platform_detail: ^5.1.0 copied to clipboard
A lightweight library to obtain details of the current platform in a much more complete and simple way.
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
Platform
andTargetPlatform
do not provide support for detecting web, which can be a limitation in universal apps.
✅platform_detail
addresses 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
kIsWeb
or 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.entitlements
andReleaseProfile.entitlements
files:
<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');
}
}