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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:25:02