Flutter Markdown渲染插件markd的使用
Flutter Markdown渲染插件markd的使用
简介
这是一个用于自定义Markdown语法的dart-markdown
库的分支。它提供了多种自定义功能,使得开发者可以更容易地定制Markdown解析器。
特性差异
-
带复选框的列表:
- 在Markdown中添加
data-line
属性来指定复选框所在的行。
- 在Markdown中添加
-
TableSyntax:
- 引入了
escapeFoward
用于跳过不应被视为列分隔符的管道字符(|
)。 - 引入了
processCellContent
用于预处理单元格内容。
- 引入了
-
链接增强:
- 引入了
LinkMapper
,允许应用程序映射到特定的应用程序链接。 - 引入了
parseInlineLink
用于解析内联链接中的URL。
- 引入了
-
易于定制:
- 提供了
Document.be
,InlineParser.be
,BlockParser.be
,blockParserBuilder
和inlineParserBuilder
,使得应用程序可以预先准备语法解析器。 - 引入了
Document.options
以提供特定应用的信息以便更精细的控制。 - 引入了
InlineSyntax.matches
用于简化覆盖操作。 - 引入了
FencedCodeBlockSyntax.getLanguageClass
用于生成自定义CSS类。 - 引入了
CondensedHtmlRenderer
和TextRenderer
用于更轻松地定制CSS。 DelimiterRun.tryParse
依赖于SimpleParser
而不是InlineParser
。
- 提供了
资源
使用者
使用方法
首先,我们需要在pubspec.yaml
文件中添加markd
依赖:
dependencies:
markd: ^2.0.2
然后,我们可以在Dart代码中使用markd
库将Markdown文本转换为HTML。
import 'package:markd/markdown.dart';
void main() {
print(markdownToHtml('Hello *Markdown*'));
//=> <p>Hello <em>Markdown</em></p>
}
语法扩展
markd
支持一些Markdown扩展,这些扩展超出了原始的Perl Markdown实现。默认情况下,这些扩展符合CommonMark规范。可以通过在markdownToHtml
函数的blockSyntaxes
或inlineSyntaxes
参数中指定一个扩展语法数组来启用单个扩展。
目前支持的内联扩展语法有:
InlineHtmlSyntax()
- 大致符合CommonMark对“原始HTML”的定义。
目前支持的块扩展语法有:
const FencedCodeBlockSyntax()
- 类似Pandoc和PHP Markdown Extra用户熟悉的代码块。const HeaderWithIdSyntax()
- ATX样式标题具有生成的ID,用于链接锚点(类似于Pandoc的auto_identifiers
)。const SetextHeaderWithIdSyntax()
- Setext样式标题具有生成的ID,用于链接锚点(类似于Pandoc的auto_identifiers
)。const TableSyntax()
- 类似GitHub、PHP Markdown Extra和Pandoc用户熟悉的表格语法。
例如:
import 'package:markd/markdown.dart';
void main() {
print(markdownToHtml('Hello <span class="green">Markdown</span>',
inlineSyntaxes: [InlineHtmlSyntax()]));
//=> <p>Hello <span class="green">Markdown</span></p>
}
扩展集
为了方便扩展管理,你可以直接指定一个扩展集。markdownToHtml()
和Document()
都接受名为extensionSet
的参数。目前有四个预定义的扩展集:
-
ExtensionSet.none:不包括任何扩展。在这种情况下,Markdown文档将使用一组默认的块和内联语法解析器进行解析,这与原始Perl Markdown实现的解析方式非常接近。
-
ExtensionSet.commonMark:除了默认解析器之外,还包括两个扩展,使解析输出更接近CommonMark规范:
- 块语法解析器:
const FencedCodeBlockSyntax()
- 内联语法解析器:
InlineHtmlSyntax()
- 块语法解析器:
-
ExtensionSet.gitHubFlavored:除了默认解析器之外,还包括五个扩展,使解析输出更接近GitHub Flavored Markdown规范:
- 块语法解析器:
const FencedCodeBlockSyntax()
,const TableSyntax()
- 内联语法解析器:
InlineHtmlSyntax()
,StrikethroughSyntax()
,AutolinkExtensionSyntax()
- 块语法解析器:
-
ExtensionSet.gitHubWeb:包括八个扩展。在
gitHubFlavored
扩展集的基础上,增加了块语法解析器HeaderWithIdSyntax
和SetextHeaderWithIdSyntax
,它们为标题添加id
属性,并且增加了一个内联语法解析器EmojiSyntax
用于解析GitHub风格的表情符号:- 块语法解析器:
const FencedCodeBlockSyntax()
,const HeaderWithIdSyntax()
,const SetextHeaderWithIdSyntax()
,const TableSyntax()
- 内联语法解析器:
InlineHtmlSyntax()
,StrikethroughSyntax()
,EmojiSyntax()
,AutolinkExtensionSyntax()
- 块语法解析器:
自定义语法扩展
你可以创建并使用自己的语法扩展。
import 'package:markd/markdown.dart';
void main() {
var syntaxes = [TextSyntax('nyan', sub: '~=[,,_,,]:3')];
print(markdownToHtml('nyan', inlineSyntaxes: syntaxes));
//=> <p>~=[,,_,,]:3</p>
}
更多关于Flutter Markdown渲染插件markd的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Markdown渲染插件markd的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用flutter_markdown
插件来渲染Markdown内容的示例代码。flutter_markdown
是一个非常流行的Flutter插件,用于将Markdown文本渲染为Flutter的小部件。
首先,你需要在你的pubspec.yaml
文件中添加flutter_markdown
依赖:
dependencies:
flutter:
sdk: flutter
flutter_markdown: ^0.6.9 # 请注意版本号,使用最新版本
然后运行flutter pub get
来获取依赖。
接下来是一个完整的示例代码,展示如何使用flutter_markdown
插件来渲染Markdown文本:
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Markdown Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
final String markdownData = """
# Flutter Markdown Demo
This is a **bold** text.
This is an _italic_ text.
- Item 1
- Item 2
- Item 3
```dart
void main() {
print('Hello, World!');
}
Flutter is an open-source UI software development kit created by Google. “”";
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(‘Flutter Markdown Demo’), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Markdown( data: markdownData, styleSheet: MarkdownStyleSheet( h1: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), h2: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), p: TextStyle(fontSize: 16), code: TextStyle(fontFamily: ‘monospace’), link: TextStyle(color: Colors.blue, decoration: TextDecoration.underline), ), ), ), ); } }
在这个示例中:
1. 我们定义了一个包含Markdown文本的字符串`markdownData`。
2. 使用`Markdown`小部件来渲染这个Markdown文本。
3. `MarkdownStyleSheet`用于自定义Markdown渲染的样式,比如标题、段落、代码块和链接的样式。
运行这个示例应用,你将看到一个使用Markdown格式化的内容被正确地渲染在Flutter应用中。这个示例展示了如何使用标题、加粗文本、斜体文本、列表、代码块和链接等Markdown特性。