dart 在Flutter中没有buildcontext的类中获取屏幕大小

2guxujil  于 2023-05-26  发布在  Flutter
关注(0)|答案(4)|浏览(218)

我试图在一个自定义类中获得屏幕尺寸,其中没有构建方法。如何在不使用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':不是真的

blpfk2vs

blpfk2vs1#

使用

MediaQueryData.fromWindow(WidgetsBinding.instance.window);

你可以用它来获取MediaQuery,而不需要上下文,它依赖于窗口的示例来获取大小信息

vnzz0bqm

vnzz0bqm2#

您可以直接将屏幕的widthheight作为widget 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;
  }
}

用途:

// Wherever you'll be using it
ShapesPainter(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
)
wlsrxk51

wlsrxk513#

截至2023年5月,在Flutter 3.10.1中,MediaQueryData.fromWindow()已被弃用。现在使用WidgetsBinding.instance.platformDispatcher.views.first.physicalSize.width。将width替换为height以获得屏幕的高度

5uzkadbs

5uzkadbs4#

通过以下方式,您可以获得设备屏幕大小,而无需在构建方法中声明它们。

void paint(BuildContext context)
{
  double width = MediaQuery.of(context).size.width;
  double height = MediaQuery.of(context).size.height;
}

导入此方法后,您可以在其他文件构建方法中访问它们。

paint(context)

相关问题