toWidget method

  1. @override
Widget toWidget(
  1. RenderContext context
)
override

Implementation

@override
Widget toWidget(RenderContext context) {
  dom.Node? textNode;
  List<Widget> widgets = <Widget>[];
  //TODO calculate based off of parent font size.
  final rubySize = max(9.0, context.style.fontSize!.size! / 2);
  final rubyYPos = rubySize + rubySize / 2;
  element.nodes.forEach((c) {
    if (c.nodeType == dom.Node.TEXT_NODE) {
      textNode = c;
    }
    if (c is dom.Element) {
      if (c.localName == "rt" && textNode != null) {
        final widget = Stack(
          alignment: Alignment.center,
          children: <Widget>[
            Container(
                alignment: Alignment.bottomCenter,
                child: Center(
                    child: Transform(
                        transform:
                            Matrix4.translationValues(0, -(rubyYPos), 0),
                        child: Text(c.innerHtml,
                            style: context.style
                                .generateTextStyle()
                                .copyWith(fontSize: rubySize))))),
            Container(
                child: Text(textNode!.text!.trim(),
                    style: context.style.generateTextStyle())),
          ],
        );
        widgets.add(widget);
      }
    }
  });
  return Row(
    key: AnchorKey.of(context.parser.key, this),
    crossAxisAlignment: CrossAxisAlignment.end,
    textBaseline: TextBaseline.alphabetic,
    mainAxisSize: MainAxisSize.min,
    children: widgets,
  );
}