You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:从Zefyr迁移至Fleather,旧文档兼容问题求解

Zefyr 文档迁移至 Fleather 的格式转换解决方案

问题描述

此前使用Zefyr包,现按作者建议迁移至Fleather包,但Fleather无法读取Zefyr创建的旧文档,不想使用耗时的replaceAll函数,寻求替代解决方案。

两者格式差异主要体现在两方面:

基础格式键差异

  • Zefyr的"bold"对应Fleather的"b"
  • Zefyr的"italic"对应Fleather的"i"
  • Zefyr的"underline"对应Fleather的"u"

嵌入内容格式差异

Fleather 图片/视频格式示例:

{
    "insert": {
        "source": "https://...",
        "_type": "image",
        "_inline": false
    }
},
{
    "insert": {
        "source": "https://www.youtube.com/...",
        "_type": "video",
        "_inline": false
    }
}

Zefyr 对应嵌入格式示例:

{
    "insert": "​",
    "attributes": {
      "embed": {
        "type": "image",
        "source": "https://..."
      }
    }
},
{
    "insert": "​",
    "attributes": {
      "embed": {
        "type": "video",
        "source": "https://www.youtube.com/..."
      }
    }
}

解决方案

  • 结构化解析转换:放弃字符串替换,将JSON文档解析为可操作的对象(比如Dart中的Map或自定义实体类),遍历每个节点做针对性转换:
    1. 处理文本格式:遍历节点的attributes属性,将bold、italic、underline等旧格式键替换为Fleather对应的b、i、u,清理旧键保留新键。
    2. 处理嵌入内容:识别带有embed属性的节点,根据embed.type生成Fleather格式的insert对象,设置_type(对应Zefyr的embed.type)、source(直接复用原链接)、_inline(默认设为false),然后移除原节点的空字符串insert和attributes.embed结构。
  • 通用转换工具类:封装上述逻辑为通用函数或工具类,批量处理所有文档节点,这种方式比replaceAll更可靠,能避免复杂文档中的误匹配问题,转换效率和准确性更高。

目前我正在编写Zefyr文档转Fleather的转换代码,即将发布。


内容的提问来源于stack exchange,提问作者Mohamed elShazly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:50:26