搜尋套件、儲存庫與 APP 分類

套件詳情v5.5.0

platform_detail

一個輕量級程式庫,以更完整且簡單的方式取得目前平台的詳細資訊。

AndroidiOSmacOSWindowsLinux
近 30 天下載
408
喜歡數
27
Pub 分數
160

安裝套件

flutter pub add platform_detail

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

platform_detail 是一個輕量級的 Dart 套件,可簡化取得完整平台特定資訊的過程。它提供了一個統一且容易使用的介面,用於識別目前的操作系統、裝置類型、架構以及其他執行時細節,支援 Android、iOS、macOS、Windows 和 Linux 等多個平台。專為需要可靠平台檢測而無需重複程式碼的開發者設計,該套件將底層平台檢查抽象為簡潔、易讀的方法。此套件非常適合基於環境或裝置特性的條件邏輯。

適用情境

  • 基於平台的條件 UI 繪製
  • 設備特定功能開關
  • 跨平台調試工具
  • 執行時期環境探測
  • 優化每個裝置的效能
  • 測試平台特定行為

主要特色

  • 支援 Android、iOS、macOS、Windows 與 Linux
  • 用於平台和設備檢測的簡單 API
  • 回傳詳細的系統資訊
  • 輕量級,無外部依賴
  • 跨平台的一致性介面
  • 透過 pub add 輕鬆整合

適合對象

  • 跨平台 Flutter 應用
  • 需要平台感知邏輯的應用程式
  • 尋求最小化設定的開發者
  • 除錯與診斷工具
  • 針對多個桌面與行動平台的應用

使用建議

  • 不支援網頁平台
  • 僅限執行時平台資訊
  • 無即時平台變更檢測
  • 依賴原生平台 API
  • 某些平台可能需要權限處理
  • 不適用於複雜的裝置指紋識別

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Platform Detail Logo

Platform Detail

Pub Version CI Status CD Status Code Coverage

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 and TargetPlatform 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.
  • ✅ Static API with simple access from PlatformDetail.
  • ✅ No need to manually check kIsWeb or rely on partial solutions.
  • ✅ Typed runtime environment details (platform, deviceModel, locale, platformType).
  • ✅ 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.

Run the Example

The example app now shows device info, network info and EnvironmentDetails on screen.

If you use VS Code, you can launch it with the Flutter Example debug configuration (cwd: example, program: lib/main.dart).


🔍 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 both DebugProfile.entitlements and ReleaseProfile.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

Get compact environment details

If you need a typed and lightweight payload with platform, model and locale, use environmentDetails():

void main() async {
  final details = await PlatformDetail.environmentDetails();

  print(details.platformType); // PlatformType.android
  print(details.platform); // android 14
  print(details.deviceModel); // Google Pixel 8
  print(details.locale); // en-US
}

This returns an EnvironmentDetails object with these fields:

  • platformType: PlatformType
  • platform: String
  • deviceModel: String
  • locale: String

The example app includes a section that renders these values on screen.

Get app version and build number

If you need app package metadata, you can use versionDetails():

void main() async {
  final details = await PlatformDetail.versionDetails();

  print(details.appName); // My App
  print(details.packageName); // com.example.my_app
  print(details.version); // 5.4.0
  print(details.buildNumber); // 12
}

This returns a VersionDetails object with these fields:

  • appName: String
  • packageName: String
  • version: String
  • buildNumber: String

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

所屬分類

依賴

依賴清單 3 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。