在没有BuildContext的情况下,如何在Flutter中获得屏幕大小?

9w11ddsr  于 2022-12-27  发布在  Flutter
关注(0)|答案(3)|浏览(214)

首先,this,虽然在问题上相似,但不是我所需要的,因为答案对我的情况没有帮助。
我让我的AppConfig根据设备决定字体大小,这样很大的设备,比如平板电脑,会得到更大的文本(稍微大一点)。我的config会在任何视图之前被调用,所以在它运行时我没有BuildContext。那么我该怎么做呢?

class AppConfig {
  static AppConfig _instance;

  static AppConfig instance() {
    if (_instance == null) {
      _instance = AppConfig();
    }
    return _instance;
  }

// config stuff for colours and themes

double width = MediaQuery.of(context).size.width;

if (width > 500) { //arbitrary number I haven't decided yet
    initWithBigFonts();
} else {
    initWithSmallFonts();
}
9avjhtql

9avjhtql1#

为了将来参考完整的解决方案:
通过添加

Size size = WidgetsBinding.instance.window.physicalSize;
double width = size.width;
double height = size.height;

您可以在任何地方,无需BuildContext,从设备屏幕获取Size。

h9a6wy2h

h9a6wy2h2#

在这种情况下,您应该考虑devicePixelRatio;

Size size = WidgetsBinding.instance.window.physicalSize;
double ratio = WidgetsBinding.instance.window.devicePixelRatio;
double width = size.width / ratio;
nhhxz33t

nhhxz33t3#

大小size =媒体查询数据.来自窗口(小部件绑定.示例.窗口).大小;

相关问题