问题描述:
flutter项目中由于要适配UI,所以我用dart:ui中的window直接用获取屏幕大小
class GM{
//屏幕属性--------------------------------------------------------------------------------------
///屏幕大小
static Size get screenSize{
return window.physicalSize / window.devicePixelRatio;
}
比较坑的是在测试运行时,没有任何问题,能正常取到;但是当你打包release后再运行,就不能正常获取到了,ui会因为适配出现和打包时完全不一样的效果。
在api的文档上有这样一段说明:
At startup, the size of the application window may not be known before Dart code runs. If this value is observed early in the application lifecycle, it may report [Size.zero].
原来在APP启动时去调用,可能得到的屏幕大小是0.
解决方法:
不能在启动时直接获得,那么就在启动后的第一个页面的build初始化了.
class GM{
///屏幕大小
static Size _screenSize;
static Size get screenSize{
return _screenSize;
}
static void initScreen(BuildContext context){
var media = MediaQuery.of(context);
_screenSize = media.size;
}
}
class InitPage extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return _InitPageState();
}
}
class _InitPageState extends State<InitPage>{
@override
Widget build(BuildContext context) {
//在这里进行初始化
GM.initScreen(context);
return Scaffold(
body: ...
);
}
网友评论