paint() 方法中的 size 属性与 CustomPainter 中指定的大小不同



这是第一个code

import 'package:flutter/cupertino.dart';
class Test extends StatelessWidget {
@override
Widget build(BuildContext context) {
final width1 = MediaQuery.of(context).size.width;
print(width1);
return GestureDetector(
child: Container(
height: width1,
width: width1,
child: Stack(
alignment: AlignmentDirectional.center,
children: <Widget>[
Child1(),
Child2(),
Child3(),
//...
],
),
));
}
}
class Child1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
final width2 = MediaQuery.of(context).size.width;
print(width2);
return CustomPaint(
painter: Painter1(),
size: MediaQuery.of(context).size,
//even trying to impose a child's width didn't work
//      child:Container(
//        width: width2,
//          height: width2,
//      )
);
}
}
class Painter1 extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final width3 = size.width;
print(width3);//different than width1 and width2 !!
}
//...
}

我将小部件Test()放在一个占据整个屏幕的列小部件中,我期望的是width1=width2=width3(即我希望paint()方法接收的大小与为相应的CustomPaint类指定的大小相同(。

当我将此Test()小部件直接放置在Column中时,可以实现预期的行为。

但是,当我用Padding()包裹Test()时,paint()方法的尺寸小于width1(并且width1等于width2(

如何paint()收到我想要的尺寸?

当你用 Padding(( 包装 Test(( 时,Canvas 的尺寸更小,因为填充会占用剩余的空间。

width1 和 width2 保持不变,因为它是 MediaQuery 中的大小,即您的屏幕尺寸。

我认为你在 paint(( 中获得的大小是你的宽度1 - 填充,如果我没错的话。

尝试对齐容器的子项而不添加填充。

最新更新