无需BuildContext获取devicePixelRatio以创建分辨率感知BitmapDescriptor
获取devicePixelRatio无需BuildContext的方法
当然有两种可靠的方式可以不依赖BuildContext和MediaQuery获取devicePixelRatio:
通过WidgetsBinding.instance获取
利用Flutter的WidgetsBinding实例直接访问window属性,无需上下文。代码示例:static Future<BitmapDescriptor> makeBitmapDescriptor(String path) { final devicePixelRatio = WidgetsBinding.instance.window.devicePixelRatio; return BitmapDescriptor.fromAssetImage( ImageConfiguration(devicePixelRatio: devicePixelRatio), path, ); }注意:如果在
runApp()之前调用这段代码,需要先执行WidgetsFlutterBinding.ensureInitialized();确保绑定初始化完成。通过dart:ui的window对象获取
导入dart:ui包后,直接访问全局的window对象获取像素比:import 'dart:ui'; static Future<BitmapDescriptor> makeBitmapDescriptor(String path) { final devicePixelRatio = window.devicePixelRatio; return BitmapDescriptor.fromAssetImage( ImageConfiguration(devicePixelRatio: devicePixelRatio), path, ); }同样要保证Flutter引擎已经初始化,建议在
runApp()之后调用,或者提前初始化绑定。
这两种方式都能准确获取设备的像素比,适配分辨率感知图片的需求,适合在无上下文的场景(比如全局工具类、初始化逻辑)中使用。
内容的提问来源于stack exchange,提问作者Sunshine
相关产品推荐
相关产品推荐

