我正在构建一个 CustomPaint 小部件,以使用 ParagraphBuilder 以自定义方式显示文本,并将其命名为 myHtmlWidget。
我的问题是如何在绘制之前确定小部件的高度?我试图在 MyHtmlPainter 的构造函数中调用 ParagraphBuilder 并测量高度,但那里没有宽度!
这是我的构建树的一部分:
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;
}
}