如何在Flutter中为屏幕的高度和宽度创建全局变量?

时间:2019-07-14 01:11:31

标签: flutter dart

我正在尝试在变量文件中设置屏幕高度和宽度的变量,以便可以从所有其他文件中访问它们。

这是我的代码:

import 'package:flutter/material.dart';

BuildContext context = context;

double screenWidth = MediaQuery.of(context).size.width;
double screenHeight = MediaQuery.of(context).size.height;

但是,这导致应用程序无法运行并返回消息

  

在初始化期间读取静态变量'context'

2 个答案:

答案 0 :(得分:4)

您需要一个有效的BuildContext实例,并且无法从Widget的{​​{1}}方法中获得一个实例。相反,您可以声明全局变量并稍后初始化

build

根据您的情况,您也可以使用Window.physicalSize

double screenWidth;
double screenHeight;

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Initialize `screenWidth` and `screenHeight` only if they haven't
    // already been set.
    screenWidth ??= MediaQuery.of(context)?.size.width;
    screenHeight ??= MediaQuery.of(context)?.size.height;

    ...
  }
}

还要注意,在这两个示例中,都将屏幕尺寸设置为一次。因此,例如,如果屏幕方向发生变化,则不会自行更新值。

答案 1 :(得分:3)

您不能真的那样做,请看一下这个例子。创建一个课程

class MyUtility {
  BuildContext context;

  MyUtility(this.context) : assert (context != null);

  double get width => MediaQuery.of(context).size.width;
  double get height => MediaQuery.of(context).size.height;
}

这就是您的使用方式,当您想获得widthheight时,只需使用

double width = MyUtility(context).width;
double height = MyUtility(context).height;

确保您通过的context应该在build()执行之后,否则会出错。