首先是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()
放置在占据整个屏幕的Column小部件中,而我期望的是width1=width2=width3
(即我期望paint()
方法接收的大小与为相应CustomPaint
类指定的大小相同)。当我将此
Test()
小部件直接放置在Column
中时,可以实现预期的行为。但是,当我用
Test()
包装Padding()
时,然后paint()
方法接收到小于width1
的大小(并且width1
保持等于width2
)如何使
paint()
接收想要的大小?
最佳答案
当用Padding()包装Test()时,Canvas会变小,因为Padding会占用剩余的空间。
width1 and width2 stays the same because its the size from MediaQuery, which is your screen size.
我认为您在paint()中获得的尺寸是您的width1-填充,如果没有错的话。
尝试对齐容器的子级,而不添加填充。
关于flutter - paint()方法中的Size属性不同于CustomPainter中指定的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999140/