如何在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
相关产品推荐
相关产品推荐

