Flutter Markdown解析插件standard_markdown的使用
Flutter Markdown解析插件standard_markdown的使用
standard_markdown
是一个支持 GFM(GitHub Flavored Markdown)和 CommonMark 标准的 Flutter 包。
如何使用
首先,确保你已经添加了 standard_markdown
包到你的 pubspec.yaml
文件中:
dependencies:
standard_markdown: ^版本号
然后,你可以使用以下代码来初始化并使用 StandardMarkdown
组件:
import 'package:flutter/material.dart';
import 'package:standard_markdown/standard_markdown.dart';
// 初始化 Markdown 数据控制器
TextEditingController editingController = TextEditingController(text: markdown);
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
title: 'MarkdownViewer Demo',
debugShowCheckedModeBanner: false,
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('MarkdownViewer Demo')),
body: StandardMarkdown(
oninit: (config) {
// 在组件初始化时设置光标位置
editingController.selection = TextSelection.fromPosition(const TextPosition(offset: 0));
},
mode: 0, // 0 表示即时渲染模式
toolbar: true, // 显示工具栏
selectable: true, // 文本可选
data: editingController, // 控制 Markdown 数据的控制器
),
);
}
}
支持的编辑模式
- ❌ 即时渲染模式 (ir)
- ✅ 分屏模式 (sv)
支持的 CommonMark 语法
- ✅ 分割线
- ✅ 代码块(支持语法高亮)
- ❌ HTML 块(XSS 过滤)
- ✅ 链接
- ✅ 引用
- ✅ 段落
- ✅ 列表
- ✅ 反斜杠转义
- ✅ 斜体
- ✅ 粗体
- ✅ 图像
- ✅ 文本内容
支持的 GFM 语法
- ✅ 表格
- ✅ 任务列表项(未处理点击改变状态)
- ✅ 删除线
- ✅ 自动链接
其他功能
- ❌ 注脚
- ❌ 搜索
- ✅ 格式化 Markdown
- ❌ 目录
- ✅ LaTeX/KaTeX
- ❌ ECharts
- ✅ 使用简单
- ✅ 工具栏
- ✅ 一个控制器控制所有
- ✅ 在 Material 3 中可选
完整示例代码
import 'package:flutter/material.dart';
import 'package:standard_markdown/standard_markdown.dart';
const markdown = r'''
# 我是标题 _sd_
## 我是副标题 $dsda$
### 我是三级标题
#### 我是四级标题
##### 我是五级标题
###### 我是六级标题
```dart
class MarkdownHelper {
Map<String, Widget> getTitleWidget(m.Node node) => title.getTitleWidget(node);
Widget getPWidget(m.Element node) => p.getPWidget(node);
Widget getPreWidget(m.Node node) => pre.getPreWidget(node);
}
斜体文字
粗体文字
我是代码
删除线
斜体、粗体和删除线
测试引用文本和 粗体
- 无序列表
- 一项
- 子项 a a
- 子项 bbbb
- 子子项 CCCC
- 有序列表
- 一项
- 二项
- 子项 AAAA
- 子项 BBBB
- 子项 CCCC
- [ ] 我是 复选框
- [X] 我也是 复选框
测试分割线:
测试表格:
表头 1 | 表头 2 |
---|---|
行 1 列 1 | 行 1 列 2 |
行 2 列 1 | 行 2 列 2 |
Markdown 示例
Hello Markdown!
特点
-
[X] 符合 100% CommonMark。
-
[X] 符合 100% GFM。
// Dart 代码示例 void main() { print('Hello, World!'); }
多国语言测试
اختبار متعدد اللغات
다국어 테스트
多言語テスト
这是一篇讲解如何正确使用 Markdown 的排版示例,学会这个很有必要,能让你的文章有更佳清晰的排版。
引用文本:Markdown 是一种灵感来自文本的格式化语法
语法指导
普通内容
这段内容展示了在内容里面一些排版格式,比如:
- 加粗 -
**加粗**
- 倾斜 -
*倾斜*
- ~删除线~ -
~~删除线~~
Code 标记
-Code 标记
- 超级链接 -
[超级链接](https://ld246.com)
- username@gmail.com -
[username@gmail.com](mailto:username@gmail.com)
表情符号 Emoji
支持大部分标准的表情符号,可使用输入法直接输入。
一些表情例子
😄 😆 😵 😭 😰 😅 😢 😤 😍 😌 👍 👎 💯 👏 🔔 🎁 ❓ 💣 ❤️ ☕️ 🌀 🙇 💋 🙏 💢
大标题 - Heading 3
你可以选择使用 H1 至 H6,使用 ##(N) 打头。建议帖子或回帖中的顶级标题使用 Heading 3,不要使用 1 或 2,因为 1 是系统站点级,2 是帖子标题级。
注意: 别忘了 # 后面需要有空格!
Heading 4
Heading 5
Heading 6
图片
普通代码块
语法高亮支持
如果在 ``` 后面跟随语言名称,可以有语法高亮的效果哦,比如:
演示 Go 代码高亮
package main
import "fmt"
funcmain() {
fmt.Println("Hello, 世界");
}
演示 Java 高亮
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
提示: 语言名称支持下面这些:
ruby
,python
,js
,html
,erb
,css
,coffee
,bash
,json
,yml
,xml
…
有序、无序、任务列表
无序列表
- Java
- Spring
- IoC
- AOP
- Spring
- Go
- gofmt
- Wide
- Node.js
- Koa
- Express
有序列表
- Node.js
- Express
- Koa
- Sails
- Go
- gofmt
- Wide
- Java
- Latke
- IDEA
任务列表
- [X] 发布 Sym
- [X] 发布 Solo
- [ ] 预约牙医
表格
如果需要展示数据什么的,可以选择使用表格。
表头 1 | 表头 2 |
---|---|
单元格 1 | 单元格 2 |
单元格 3 | 单元格 4 |
单元格 5 | 单元格 6 |
段落
空行可以将内容进行分段,便于阅读。(这是第一段)
使用空行在 Markdown 排版中相当重要。(这是第二段)
链接引用
数学公式
多行公式块:
$$ 123123\pm $$
行内公式:
公式$Em^2$是行内。
复杂使用
随机变量 | $X$ | $E(x)$期望 | $Var(X)$方差 |
---|---|---|---|
两点分布 | $B(1,p)$ | $P$ | $p(1-p)$ |
二项分布 | $B(n,p)$ | $nP$ | $np(1-p)$ |
泊松分布 | $P(\lambda)$ | $\lambda$ | $\lambda$ |
均匀分布 | $U[a,b]$ | $(a+b)/2$ | $(b-a)^2/12$ |
指数分布 | $EP(\lambda)$ | $1/\lambda$ | $1/\lambda^2$ |
正态分布 | $N(\mu,\sigma^2)$ | $\mu$ | $\sigma^2$ |
更多关于Flutter Markdown解析插件standard_markdown的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Markdown解析插件standard_markdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用standard_markdown
插件来解析Markdown内容的示例代码。这个插件允许你将Markdown字符串渲染为Flutter的小部件。
首先,你需要在你的pubspec.yaml
文件中添加standard_markdown
依赖:
dependencies:
flutter:
sdk: flutter
standard_markdown: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,在你的Dart文件中,你可以使用Markdown
小部件来解析和显示Markdown内容。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:standard_markdown/standard_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: MarkdownPage(),
);
}
}
class MarkdownPage extends StatelessWidget {
final String markdownData = """
# Flutter Markdown Demo
This is a demo of using `standard_markdown` plugin in Flutter.
- Item 1
- Item 2
- Item 3
```dart
void main() {
print("Hello, Flutter!");
}
Check out Flutter for more info. “”";
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(‘Markdown Demo’), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Markdown( data: markdownData, styleSheet: MarkdownStyleSheet.fromTheme(context.theme), // 你也可以自定义样式表 // styleSheet: MarkdownStyleSheet( // h1: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), // p: TextStyle(fontSize: 16), // code: TextStyle(fontFamily: ‘monospace’), // // 添加更多自定义样式 // ), onLinkTap: (url) { // 处理链接点击事件 if (url.startsWith(‘http’)) { // 打开网页 _launchURL(url); } else { // 处理内部链接或其他逻辑 print(‘Link tapped: $url’); } }, ), ), ); }
// 打开URL的函数 _launchURL(String url) async { if (await canLaunch(url)) { await launch(url); } else { throw ‘Could not launch $url’; } } }
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个使用`standard_markdown`插件解析和显示Markdown内容的页面。Markdown字符串包含标题、列表、代码块和一个链接。
- `Markdown`小部件用于解析和显示Markdown内容。
- `styleSheet`参数允许你自定义Markdown的样式,这里使用了从主题生成的样式表,但你也可以创建一个自定义的`MarkdownStyleSheet`。
- `onLinkTap`回调用于处理链接点击事件,这里我们简单地使用`url_launcher`包来打开HTTP链接(注意:你需要在`pubspec.yaml`中添加`url_launcher`依赖并运行`flutter pub get`)。
这个示例应该可以帮助你开始在Flutter项目中使用`standard_markdown`插件来解析和显示Markdown内容。如果你有任何进一步的问题或需要更复杂的示例,请随时提问!