Skip to content

How can I parse code with <Integer> in <pre> or <code> tag? #188

@garylab

Description

@garylab

Hello,

I'm using flutter_html with programming codes, and I had html like this:

<pre>
<code class="language-java">
    List<Integer> arr = new List<Integer>;
</code>
</pre>

when render my html with customRender:

import 'package:flutter_html/flutter_html.dart';
import 'package:html_unescape/html_unescape.dart';

class PostContent extends StatelessWidget {
  final Post post;

  @override
  Widget build(BuildContext context) {
    String content = post.content.toString();
    content = (new HtmlUnescape()).convert(content);

    return Html(
      data: content,
      useRichText: false,
      customRender: (node, children) {
        if (node is dom.Element) {
          switch (node.localName) {
            case "code": return renderCode(node); break;
          }
        }
        return null;
      },
    );
  }

  Widget renderCode(dom.Element node) {
    return Text(
      node.text,     // node.text or node.innerHtml?
      style: codeTheme['keyword'].merge(TextStyle(
          fontSize: codeFontSize,
          fontFamily: codeFontFamily,
          color: node.parent.localName == "pre" ? Colors.red : Colors.green,
      )),
    );
  }

}

in renderCode function, if I use node.text, the code rendered will become:

List arr = new List;

If I use node.innerHtml, It will be:

List<integer> arr = new List<integer></integer></integer>;

Is there a method to resovle it?
Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions