我正在构建一个CustomPaint小部件,以使用ParagraphBuilder以自定义方式显示文本,将其命名为myHtmlWidget。
我的问题是在绘制小部件之前如何确定其高度? 我试图在MyHtmlPainter的构造函数中调用ParagraphBuilder并测量高度,但是那里没有 width !
这是我的构建树的一部分:
Widget myHtmlWidget(List<dom.Element> spans, TextAlign ebookTextAlign) {
var painter = MyHtmlPainter(spans, ebookTextAlign);
return CustomPaint(
painter: painter,
child: Container(
height: 550, // **** THIS IS THE PROBLEM, I WANT IT TO MATCH/FIT TO THE HEIGHT OF RENDERED TEXT
),
);
}
这是MyHtmlPainter:
class MyHtmlPainter extends CustomPainter {
List<dom.Element> spans;
TextAlign ebookTextAlign;
ui.Paragraph paragraph;
MyHtmlPainter(this.spans, this.ebookTextAlign);
@override
void paint(Canvas canvas, Size size) {
var pin = Offset(0, 0);
// To create a paragraph of text, we use ParagraphBuilder.
final ui.ParagraphBuilder builder = ui.ParagraphBuilder(
ui.ParagraphStyle(
textDirection: ui.TextDirection.rtl,
textAlign: ebookTextAlign,
fontSize: ebookMainTextSize,
),
)
..pushStyle(ui.TextStyle(color: const ui.Color(0xFF000000)));
spans.forEach((spn) {
if (spn.localName == "p")
builder.addText("\n");
builder.addText(spn.text + " ");
});
builder.pop();
paragraph = builder.build()
..layout(ui.ParagraphConstraints(width: size.width));
canvas.drawParagraph(paragraph, pin);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
// TODO: implement shouldRepaint
return null;
}
}