我正在尝试在变量文件中设置屏幕高度和宽度的变量,以便可以从所有其他文件中访问它们。
这是我的代码:
import 'package:flutter/material.dart';
BuildContext context = context;
double screenWidth = MediaQuery.of(context).size.width;
double screenHeight = MediaQuery.of(context).size.height;
但是,这导致应用程序无法运行并返回消息
在初始化期间读取静态变量'context'
答案 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;
}
这就是您的使用方式,当您想获得width
和height
时,只需使用
double width = MyUtility(context).width;
double height = MyUtility(context).height;
确保您通过的context
应该在build()
执行之后,否则会出错。