我可以将MediaQuery.of(context)修复为常量值吗?



为了制作响应式应用程序,我为每个组件大小使用MediaQuery.of(context),但为每个部分编写都很难。

因此,我将其固定为常数,处理是否正确?

class ScreenUtil {
  static double width;
  static double height;
}
void initializeConstants(BuildContext context){
  ScreenUtil.width = MediaQuery.of(context).size.width;
  ScreenUtil.height = MediaQuery.of(context).size.height;
  CurrentPlatform.platform = Theme.of(context).platform;
}

不,这是一个坏主意。

我们需要.of(context)的原因是始终获取最新对象,以便我们可以确保小部件在继承的值更改时正确更新自身。

MediaQuery.of(context).size不是一个常量。相反,当用户旋转屏幕时,例如,从纵向模式旋转到水平模式,它将动态更新自身,在这种情况下,它的widthheight将被翻转。

一般来说,剥离任何.of(context)并假设它们是常量不是一个好主意。根据 Flutter 的代码内 dartdoc,调用此方法的时间复杂度为 O(1):

调用此方法是 O(1),常数因子很小,但会 导致更频繁地重建小部件。

最新更新