You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter应用中获取设备信息?device_info_plus使用无效求方案

Flutter 获取设备型号及设备信息完整方案

一、排查device_info_plus使用失败的常见原因

  • 依赖配置不全:确认pubspec.yaml中已添加device_info_plus依赖,执行flutter pub get完成安装;iOS端需进入ios目录执行pod install同步原生依赖。
  • 平台版本不兼容:Android需确保minSdkVersion≥21,iOS需target iOS版本≥11.0(对应包的最低要求)。
  • 异步调用错误:device_info_plus的所有接口都是异步的,不能在同步方法中直接调用,必须用async/await处理。

二、正确实现设备型号获取

1. 添加依赖

在pubspec.yaml中声明依赖:

dependencies:
  device_info_plus: ^9.1.0 # 建议使用最新稳定版

执行flutter pub get完成依赖拉取,iOS端额外执行cd ios && pod install。

2. 编写跨平台获取代码

以下是封装好的异步方法,支持全平台获取设备型号:

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';

Future<String> getDeviceModel() async {
  final deviceInfo = DeviceInfoPlugin();
  
  if (kIsWeb) {
    final webInfo = await deviceInfo.webBrowserInfo;
    return webInfo.userAgent ?? 'Unknown Web Device';
  }
  
  switch (defaultTargetPlatform) {
    case TargetPlatform.android:
      final androidInfo = await deviceInfo.androidInfo;
      return androidInfo.model ?? 'Unknown Android Device';
    case TargetPlatform.iOS:
      final iosInfo = await deviceInfo.iosInfo;
      return iosInfo.model ?? 'Unknown iOS Device';
    case TargetPlatform.macOS:
      final macInfo = await deviceInfo.macOsInfo;
      return macInfo.model ?? 'Unknown macOS Device';
    case TargetPlatform.windows:
      final windowsInfo = await deviceInfo.windowsInfo;
      return windowsInfo.computerName ?? 'Unknown Windows Device';
    case TargetPlatform.linux:
      final linuxInfo = await deviceInfo.linuxInfo;
      return linuxInfo.prettyName ?? 'Unknown Linux Device';
    default:
      return 'Unknown Device';
  }
}

// 调用示例(在StatefulWidget的initState或按钮点击事件中使用)
void loadDeviceModel() async {
  final model = await getDeviceModel();
  print('当前设备型号:$model');
  // 将model赋值给Text组件或其他UI元素展示即可
}

3. 拓展:获取更多设备信息

除了型号,你还可以通过device_info_plus获取这些常用信息:

  • Android:品牌(androidInfo.brand)、系统版本(androidInfo.version.release)、设备ID(androidInfo.id)
  • iOS:设备名称(iosInfo.name)、系统版本(iosInfo.systemVersion)、硬件类型(iosInfo.hardwareModel)
  • 全平台通用:可通过await deviceInfo.deviceInfo获取统一的设备信息对象,根据平台类型解析对应字段。

三、特殊场景处理

  • Web端限制:Web环境无法直接读取硬件信息,只能通过User-Agent字符串推断设备类型,返回结果可能不够精确。
  • 模拟器/真机差异:模拟器返回的型号为模拟设备标识(如iOS模拟器返回iPhone 15 Pro),真机则返回真实硬件型号。
  • 权限说明:获取设备型号无需额外权限,但若需获取IMEI、序列号等敏感信息,Android需申请READ_PHONE_STATE权限,iOS需配置对应的权限描述。

内容的提问来源于stack exchange,提问作者SonerB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:24:31