Fire Ice
Fire Ice【免费下载链接】flameA Flutter based game engine.项目地址: https://gitcode.com/GitHub_Trending/fl/flameSome say the world willendinfire,Some say inice.From what Ive tasted of desire,I hold with those who favorfire.[- by Robert Frost]{.author}### 3. 转换为文档并渲染 dart import package:flame/components.dart; import package:flame/game.dart; import package:flame/text.dart; import package:flame_markdown/flame_markdown.dart; import package:flutter/widgets.dart; class MarkdownGame extends FlameGame { override Futurevoid onLoad() async { final markdown await Flame.assets.readFile(assets/fire_and_ice.md); add( TextElementComponent.fromDocument( document: FlameMarkdown.toDocument(markdown), style: DocumentStyle( padding: const EdgeInsets.all(16), ), size: size, ), ); await super.onLoad(); } } void main() { runApp(GameWidget(game: MarkdownGame())); }注意TextElementComponent.fromDocument需要的size参数会与DocumentStyle.width结合用于排版宽度计算见 DocumentRoot.format 的contentWidth计算逻辑。支持的 Markdown 语法与节点映射_convertElement中定义了一张完整的标签到节点映射表逐条对应如下Markdown 语法HTML 标签Flame 节点说明# ~ ######六级标题h1-h6HeaderNode(level: 1~6)对应 header_node.dart段落pParagraphNode见 paragraph_node.dart**文本**或__文本__strong/bBoldTextNode加粗*文本*或_文本_em/iItalicTextNode斜体代码codeCodeTextNode行内代码块自 0.2.2 版本起支持见 CHANGELOG~~文本~~delStrikethroughTextNode删除线需启用StrikethroughSyntax自 0.2.3 起支持[文本]{.class}spanCustomInlineTextNode自定义样式需启用CustomAttributeSyntax自 0.2.4 起支持普通文本TextPlainTextNode纯文本行内节点支持嵌套例如**This _iscodeinside italics_ inside bold.**会生成BoldTextNode → GroupTextNode → (PlainTextNode, ItalicTextNode → CodeTextNode, ...)的层级结构测试 flame_markdown_test.dart 中nested inline blocks用例完整验证了嵌套场景。重要限制源码注释 明确列出了不支持的语法表格tables、代码块code blocks、图片images、行内 HTML另外部分合法的块级与行内元素混排结构也可能不支持。渲染时请避免使用这些语法以免抛出“Unknown element tag”异常。遇到不认识的标签_convertElement会抛出Exception(Unknown element tag: ...)因此在内容中要避免使用div、a等未映射标签。样式定制DocumentStyle 与 InlineTextStyleDocumentStyledocument_style.dart负责整篇文档的排版与配色。通过 example/lib/main.dart 可以看到它的完整用法style: DocumentStyle( padding: const EdgeInsets.all(16), customStyles: { author: InlineTextStyle( color: const Color(0xFF888888), fontSize: 16, fontStyle: FontStyle.italic, ), }, ),此外测试用例展示了更多可配置项见 flame_markdown_test.dartwidth排版宽度未设置时使用format传入的widthtext全局基础行内样式如fontSizeboldText加粗文本样式如fontWeight: FontWeight.bolditalicText斜体文本样式如fontStyle: FontStyle.italiccodeText行内代码样式如fontFamily: monospacecustomStyles自定义样式映射键为CustomAttributeSyntax中定义的类名值为InlineTextStyle。排版时DocumentRoot.format会依据这些样式、文档宽度、边距、背景边框等信息把每个BlockNode布局成TextElement并计算页面高度document_root.dart。扩展语法自定义属性 CustomAttributeSyntax默认的Document不会解析删除线与自定义类名语法需要显式启用见 example/lib/main.dartFlameMarkdown.toDocument( markdown, document: Document( encodeHtml: false, inlineSyntaxes: [ StrikethroughSyntax(), CustomAttributeSyntax(), ], ), )CustomAttributeSyntaxcustom_attribute_syntax.dart是一个灵感源自 markdown-it-attrs 的简化实现基于标准的LinkSyntax解析器扩展而成。它的语法是[这段文字]{.red} 和 [这段]{.blue}。【免费下载链接】flameA Flutter based game engine.项目地址: https://gitcode.com/GitHub_Trending/fl/flame创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考