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),
    );
  },
);