我试图在没有构建方法的自定义类中获取颤动的屏幕大小。如何在不使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
在paint()期间抛出以下断言:'package:flutter/src/widgets/media_query.dart':失败的断言:第689行pos 12:'context != null':不是真的。
小智 57
使用
MediaQueryData.fromWindow(WidgetsBinding.instance.window);
Run Code Online (Sandbox Code Playgroud)
您可以使用它来获取 MediaQuery 而不需要上下文它依赖于窗口实例来获取大小信息
Moh*_*wan 21
截至 2023 年 5 月,Flutter 3.10.1 中MediaQueryData.fromWindow()已弃用。WidgetsBinding.instance.platformDispatcher.views.first.physicalSize.width现在使用。将宽度替换为高度即可获取屏幕的高度
如果您需要的话,您可以直接传递屏幕的width和height作为小部件的参数。ShapesPainter
解决方案代码:
class ShapesPainter extends CustomPainter {
final double width;
final double height;
ShapesPainter({this.width,this.height});
@override
void paint(Canvas canvas, Size size) {
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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
// Wherever you'll be using it
ShapesPainter(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2945 次 |
| 最近记录: |