如何在Flutter/Flame中使用Device Info Plus获取设备像素宽高?
问题分析与解决方案
错误原因
deviceInfoPlugin.deviceInfo 返回的是 BaseDeviceInfo 抽象类实例,该类本身没有 displayMetrics 属性。不同平台的设备信息对象(如Android端的AndroidDeviceInfo、iOS端的IosDeviceInfo)才各自实现了平台专属的屏幕尺寸属性,直接调用 displayMetrics 自然会报错。这是代码写法问题,和Flame无关。
修复方案一:按平台类型处理设备信息
需要先判断设备信息的具体类型,再调用对应平台的属性:
final deviceInfoPlugin = DeviceInfoPlugin(); final deviceInfo = await deviceInfoPlugin.deviceInfo; if (deviceInfo is AndroidDeviceInfo) { final deviceWidth = deviceInfo.displayMetrics.widthPx; print("Android设备宽度: $deviceWidth"); } else if (deviceInfo is IosDeviceInfo) { final deviceWidth = deviceInfo.screenMetrics.nativeSize.width; print("iOS设备宽度: $deviceWidth"); } // 可按需添加Windows、Web等其他平台的判断逻辑
修复方案二:用Flame原生API更高效
如果只是获取设备像素宽高,完全不需要依赖第三方库,Flame本身提供了更贴合游戏场景的方法:
- 在FlameGame子类中直接访问
size属性:class MyGame extends FlameGame { @override void onLoad() { final deviceWidth = size.x; final deviceHeight = size.y; print("设备宽度: $deviceWidth, 高度: $deviceHeight"); } } - 或者使用
Flame.device工具类(需在异步环境中调用):import 'package:flame/flame.dart'; final screenSize = await Flame.device.size; final deviceWidth = screenSize.width; print("设备宽度: $deviceWidth");
内容的提问来源于stack exchange,提问作者ainfsqgqtynpeabjgj
相关产品推荐
相关产品推荐

