列的子级CustomPainter的大小变为(0,0)。
1)当我们仅使用CustomPaint和CustomPainter时,我们期望的大小将传递给CustomPainter,并按预期方式呈现。
2)当我们使用CustomPaint和CustomPainter作为Stack的子代时,我们期望的大小没有传递给CustomPainter。
3)但是,当我们将其用作SizedBox.expand的子代时,我们期望的大小将传递给CustomPainter并进行渲染。
4)当我们使用CustomPaint和CustomPainter作为Column的子代时,我们期望的大小没有传递给CustomPainter。我们正在研究解决问题的方法。
5)但是,它的高度可以是0.0或无限。我们希望它可以扩展到合适的大小。
import 'package:flutter/material.dart';
class TestWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 1) OK Size(360.0, 640.0)
// return CustomPaint(
// painter: TestPainter(),
// );
// 2) NG Size(0.0, 0.0)
// return Stack(
// children: <Widget>[
// CustomPaint(
// painter: TestPainter(),
// ),
// ],
// );
// 3) OK Size(360.0, 640.0)
// return Stack(
// children: <Widget>[
// SizedBox.expand(
// child: CustomPaint(
// painter: TestPainter(),
// ),
// ),
// ],
// );
// 4)5) NG BoxConstraints forces an infinite height.
// return Column(
// children: <Widget>[
// SizedBox.expand(
// child: CustomPaint(
// painter: TestPainter(),
// ),
// ),
// Text('test'),
// ],
// );
// 4)5) NG Size(0.0, 0.0)
// return Column(
// children: <Widget>[
// SizedBox(
// child: CustomPaint(
// painter: TestPainter(),
// ),
// ),
// Text('test'),
// ],
// );
// 4)5) Size(360.0, 0.0)
// return Column(
// children: <Widget>[
// SizedBox(
// width: double.infinity,
// child: CustomPaint(
// painter: TestPainter(),
// ),
// ),
// Text('test'),
// ],
// );
}
}
class TestPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
print(size);
Paint p = Paint();
p.color = Color.fromARGB(0xff, 0xff, 0x00, 0x00);
Rect rect = Rect.fromLTWH(0, 0, size.width, size.height);
canvas.drawRect(rect, p);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
我们希望CustomPaint和CustomPainter可以扩展到适当的大小,并且该大小将传递给CustomPainter。
答案 0 :(得分:1)
要在flutter类中传递所需的参数,可以从实例轻松传递它 并在类中使用构造函数使用它
例如:
class TestPainter extends CustomPainter {
int size;
// Constructor
TestPainter({this.size});
}
您可以将size作为参数传递给此TestPainter类
TestPainter(size: 10);
答案 1 :(得分:1)
下面是CustomPaint()
的构造函数:
const CustomPaint({
Key key,
this.painter,
this.foregroundPainter,
this.size = Size.zero,
this.isComplex = false,
this.willChange = false,
Widget child,
}) : assert(size != null),
assert(isComplex != null),
assert(willChange != null),
super(key: key, child: child);
如果省略大小,则将其视为Size.zero
(表示Size(0.0, 0.0)
),因此您需要将所需的大小传递给'CustomPaint()`。
return CustomPaint(
size: const Size(double.infinity, double.infinity), // or whatever size you want it to be
painter: TestPainter(),
);
对于在Column
内部扩展小部件,请使用Expanded
而不是SizedBox.expand
。
答案 2 :(得分:0)
在TestPainter类中创建一个构造函数,并从那里接受参数。
例如:
var size;
TestPainter(this.size);
现在在调用此类时,将size值传递给构造函数
TestPainter(20.0);
并在paint方法内使用它:
widget.size.width