我试图在一个自定义类中获得屏幕尺寸,其中没有构建方法。如何在不使用buildcontext类的情况下获得屏幕大小?
下面的代码:
class ShapesPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
BuildContext context;
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
final paint = Paint();
paint.color = Colors.deepOrange;
var center = Offset(size.width / 2, size.height / 2);
print(height);
print(width);
Rect rect = Rect.fromLTWH(0.0, 0.0, width, height);
canvas.drawRect(rect, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
}
给出以下错误:
在paint()过程中抛出了以下Assert:'package:flutter/src/widgets/media_query. dart':Assert失败:第689行位置12:'context!= null':不是真的
4条答案
按热度按时间blpfk2vs1#
使用
你可以用它来获取MediaQuery,而不需要上下文,它依赖于窗口的示例来获取大小信息
vnzz0bqm2#
您可以直接将屏幕的
width
和height
作为widgetShapesPainter
的参数传递,如果这就是您所需要的。解决方案代码:
用途:
wlsrxk513#
截至2023年5月,在Flutter 3.10.1中,
MediaQueryData.fromWindow()
已被弃用。现在使用WidgetsBinding.instance.platformDispatcher.views.first.physicalSize.width
。将width替换为height以获得屏幕的高度5uzkadbs4#
通过以下方式,您可以获得设备屏幕大小,而无需在构建方法中声明它们。
导入此方法后,您可以在其他文件构建方法中访问它们。