我可以将MediaQuery.of(context)固定为常数吗?

时间:2019-01-30 00:35:19

标签: dart flutter

要制作响应式应用程序,我对每种组件尺寸都使用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;
}

1 个答案:

答案 0 :(得分:0)

不,这是一个坏主意。

之所以需要.of(context)是为了始终获取最新的对象,以便我们可以确保在继承的值发生更改时小部件能够正确地进行自身更新。

MediaQuery.of(context).size不是常数。取而代之的是,当用户旋转屏幕(例如,从纵向模式到水平模式)时,它将动态更新自身,并且在这种情况下,其widthheight将被翻转。

通常,剥离任何.of(context)并假定它们是常量不是一个好主意。根据{{​​3}},调用此方法的时间复杂度为O(1):

  

调用此方法的原因是常数较小的O(1),但会   导致重新构建窗口小部件的频率更高。