nixy_markdown
是一个用于在 Flutter 应用中渲染 Markdown 文本的插件。它提供了一个简单且灵活的方式来将 Markdown 格式的文本转换为 Flutter 组件。以下是如何使用 nixy_markdown
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 nixy_markdown
依赖:
dependencies:
flutter:
sdk: flutter
nixy_markdown: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的 Dart 文件中导入 nixy_markdown
包:
import 'package:nixy_markdown/nixy_markdown.dart';
3. 使用 Markdown
组件
nixy_markdown
提供了一个 Markdown
组件,你可以直接使用它来渲染 Markdown 文本。
import 'package:flutter/material.dart';
import 'package:nixy_markdown/nixy_markdown.dart';
class MarkdownExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
final markdownData = '''
# Hello, Markdown!
This is a **bold** text and this is an *italic* text.
- Item 1
- Item 2
- Item 3
[Google](https://www.google.com)
''';
return Scaffold(
appBar: AppBar(
title: Text('Markdown Example'),
),
body: Markdown(
data: markdownData,
),
);
}
}
void main() {
runApp(MaterialApp(
home: MarkdownExample(),
));
}
4. 自定义样式
nixy_markdown
允许你通过 styleSheet
参数自定义 Markdown 的样式。你可以使用 MarkdownStyleSheet
来定义不同 Markdown 元素的样式。
Markdown(
data: markdownData,
styleSheet: MarkdownStyleSheet(
h1: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
p: TextStyle(fontSize: 16, color: Colors.black87),
strong: TextStyle(fontWeight: FontWeight.bold, color: Colors.red),
a: TextStyle(color: Colors.blue),
),
);
5. 处理链接点击
你可以通过 onTapLink
回调来处理 Markdown 中链接的点击事件。
Markdown(
data: markdownData,
onTapLink: (String text, String? href, String title) {
print("Link clicked: $href");
// You can navigate to the link or show a dialog, etc.
},
);
6. 支持的内联元素和块级元素
nixy_markdown
支持常见的 Markdown 内联元素和块级元素,包括:
- 标题 (
#
, ##
, ###
, 等)
- 加粗 (
**bold**
)
- 斜体 (
*italic*
)
- 链接 (
[text](url)
)
- 图片 (

)
- 列表 (
- item
, 1. item
)
- 引用 (
> quote
)
- 代码块 (
`code`
或
code
)
- 分隔线 (
---
)
7. 高级用法
你可以通过 MarkdownBody
组件来控制 Markdown 的解析和渲染过程,或者使用 MarkdownBuilder
来自定义渲染逻辑。
MarkdownBody(
data: markdownData,
builders: {
'h1': (context, text, children) => Center(
child: Text(
text,
style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
),
),
},
);
8. 处理图片
你可以通过 imageBuilder
来处理 Markdown 中的图片,例如使用 cached_network_image
来加载网络图片。
Markdown(
data: markdownData,
imageBuilder: (Uri uri, String? title, String? alt) {
return CachedNetworkImage(
imageUrl: uri.toString(),
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
);
},
);
9. 处理代码块
你可以通过 codeBuilder
来处理 Markdown 中的代码块,例如使用 flutter_highlight
来实现代码高亮。
Markdown(
data: markdownData,
codeBuilder: (String code, String? language) {
return HighlightView(
code,
language: language ?? 'dart',
theme: githubTheme,
padding: EdgeInsets.all(8),
textStyle: TextStyle(fontFamily: 'monospace', fontSize: 12),
);
},
);