这是第一个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 - 填充,如果我没错的话。
尝试对齐容器的子项而不添加填充。