颤动中CustomPaint的高度

时间:2019-12-30 05:18:38

标签: flutter render custom-painting

我正在构建一个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;
  }
}

0 个答案:

没有答案