Flutter Markdown转换插件delta_markdown_converter的使用

Flutter Markdown转换插件delta_markdown_converter的使用

Delta Markdown Converter

更新说明:

这是一个对原始的 delta_markdown 的分支版本,目的是为了兼容最新版本的 Flutter Quill,而 Flutter Quill 是由 quill_html_converter 所需要的。

Delta Markdown Converter 是一个用 Dart 编写的便携式 Markdown 库。它可以将 Markdown 转换为 Delta,并且可以将 Delta 转换回 Markdown。

注意:该转换器目前尚未准备好用于生产环境。


使用方法

以下是一个简单的示例,展示如何使用 delta_markdown_converter 进行 Markdown 和 Delta 的相互转换。

import 'package:delta_markdown/delta_markdown.dart';

void main() {
  // 示例 Markdown 字符串
  const markdown = 'Hello **Markdown**';

  // 将 Markdown 转换为 Delta
  final deltaJson = markdownToDelta(markdown);
  print('Markdown 转换为 Delta:\n$deltaJson');

  // 示例 Delta JSON 字符串
  const delta = r'[{"insert":"Hello "},{"insert":"Markdown","attributes":{"bold":true}},{"insert":"\n"}]';

  // 将 Delta 转换回 Markdown
  final markdownResult = deltaToMarkdown(delta);
  print('Delta 转换回 Markdown:\n$markdownResult');
}

输出结果:

  • Markdown 转换为 Delta:
    [{"insert":"Hello "},{"insert":"Markdown","attributes":{"bold":true}},{"insert":"\n"}]
  • Delta 转换回 Markdown:
    Hello **Markdown**

支持的功能

目前支持以下 Markdown 元素的转换:

  • 加粗 (Bold)
  • 斜体 (Italic)
  • 链接 (Link)
  • 引用块 (Blockquote)
  • 标题 (Header)
  • 列表 (List)
  • 代码块 (Code Block)
  • 图片 (Image)
  • 水平线 (Horizontal Rule)

不支持的功能

由于 Markdown 本身的限制或 flutter_quill 的限制,以下功能暂不支持:

Markdown 不支持的功能:

  • 背景色 (Background Color)
  • 文本颜色 (Color)
  • 字体 (Font)
  • 字号 (Size)
  • 删除线 (Strikethrough)
  • 上标/下标 (Superscript/Subscript)
  • 下划线 (Underline)
  • 文本对齐方式 (Text Alignment)
  • 文本方向 (Text Direction)
  • 数学公式 (Formula)
  • 视频 (Video)

flutter_quill 不支持的功能:

  • 行内代码 (Inline Code)

已知限制

以下功能尚未实现,需要进一步开发:

  • 缩进 (Indent)

目前测试用例较少,因此在复杂情况下,功能可能无法完全保证。


完整示例 Demo

以下是一个完整的 Flutter 示例,展示如何结合 delta_markdown_converter 在应用中使用。

import 'package:flutter/material.dart';
import 'package:delta_markdown/delta_markdown.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Delta Markdown Converter')),
        body: MarkdownConverterDemo(),
      ),
    );
  }
}

class MarkdownConverterDemo extends StatefulWidget {
  [@override](/user/override)
  _MarkdownConverterDemoState createState() => _MarkdownConverterDemoState();
}

class _MarkdownConverterDemoState extends State<MarkdownConverterDemo> {
  String _markdownInput = 'Hello **Markdown**';
  String _deltaOutput = '';
  String _markdownOutput = '';

  void _convertMarkdownToDelta() {
    setState(() {
      _deltaOutput = markdownToDelta(_markdownInput);
    });
  }

  void _convertDeltaToMarkdown() {
    setState(() {
      _markdownOutput = deltaToMarkdown(_deltaOutput);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: [
          TextField(
            onChanged: (value) => _markdownInput = value,
            decoration: InputDecoration(labelText: '输入 Markdown'),
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: _convertMarkdownToDelta,
            child: Text('Markdown 转 Delta'),
          ),
          SizedBox(height: 16),
          Text('Delta 输出:\n$_deltaOutput'),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: _convertDeltaToMarkdown,
            child: Text('Delta 转 Markdown'),
          ),
          SizedBox(height: 16),
          Text('Markdown 输出:\n$_markdownOutput'),
        ],
      ),
    );
  }
}
1 回复

更多关于Flutter Markdown转换插件delta_markdown_converter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


delta_markdown_converter 是一个用于在 Flutter 中将 Markdown 文本转换为 Delta 格式的插件。Delta 是 Quill 富文本编辑器使用的一种格式,用于表示富文本内容。通过这个插件,你可以将 Markdown 文本转换为 Quill 编辑器可以理解的 Delta 格式,从而在富文本编辑器中显示 Markdown 内容。

安装

首先,你需要在 pubspec.yaml 文件中添加 delta_markdown_converter 依赖:

dependencies:
  flutter:
    sdk: flutter
  delta_markdown_converter: ^0.0.1  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

使用

以下是一个简单的示例,展示如何使用 delta_markdown_converter 将 Markdown 文本转换为 Delta 格式:

import 'package:flutter/material.dart';
import 'package:delta_markdown_converter/delta_markdown_converter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Markdown to Delta Example'),
        ),
        body: MarkdownToDeltaExample(),
      ),
    );
  }
}

class MarkdownToDeltaExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 示例 Markdown 文本
    String markdownText = '''
# Heading 1
## Heading 2
### Heading 3

**Bold text**

*Italic text*

- List item 1
- List item 2

[Link](https://flutter.dev)
''';

    // 将 Markdown 转换为 Delta
    var delta = DeltaMarkdownConverter.markdownToDelta(markdownText);

    // 打印 Delta 结果
    print(delta);

    return Center(
      child: Text('Check the console for Delta output'),
    );
  }
}

解释

  1. 导入包:首先导入 delta_markdown_converter 包。
  2. Markdown 文本:定义一个包含 Markdown 格式的字符串。
  3. 转换:使用 DeltaMarkdownConverter.markdownToDelta 方法将 Markdown 文本转换为 Delta 格式。
  4. 输出:打印转换后的 Delta 结果。

Delta 格式

Delta 是一种 JSON 格式,用于表示富文本内容。它由一系列操作(insertdeleteretain)组成,每个操作可以包含文本、样式等信息。

例如,上述 Markdown 文本转换后的 Delta 可能如下所示:

{
  "ops": [
    {"insert": "Heading 1\n", "attributes": {"header": 1}},
    {"insert": "Heading 2\n", "attributes": {"header": 2}},
    {"insert": "Heading 3\n", "attributes": {"header": 3}},
    {"insert": "Bold text\n", "attributes": {"bold": true}},
    {"insert": "Italic text\n", "attributes": {"italic": true}},
    {"insert": "List item 1\n", "attributes": {"list": "bullet"}},
    {"insert": "List item 2\n", "attributes": {"list": "bullet"}},
    {"insert": "Link", "attributes": {"link": "https://flutter.dev"}},
    {"insert": "\n"}
  ]
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!