菜单

文档编辑器系统

相关源文件

文档编辑器系统提供 AppFlowy 中的核心富文本编辑功能,使用户能够创建和编辑包含各种内容块、格式选项和交互元素的文档。该系统处理文档渲染、用户交互、块管理以及桌面和移动界面的跨平台适配。

有关文档中的 AI 写作助手,请参阅AI 写作助手。有关数据库视图渲染,请参阅数据库视图系统

架构概述

文档编辑器系统基于 appflowy_editor 包构建,并遵循块状架构,其中文档由分层内容块组成。该系统通过文档插件基础设施与 AppFlowy 的更广泛生态系统集成。

核心架构组件

来源:frontend/appflowy_flutter/lib/plugins/document/document_page.dart31-387 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart43-590 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_configuration.dart63-102

文档渲染管道

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_configuration.dart294-447 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart68-192

核心组件

AppFlowyEditorPage

AppFlowyEditorPage 作为主要包装组件,将 AppFlowyEditor 与 AppFlowy 特定的功能和配置集成。

组件文件目的
AppFlowyEditorPageeditor_page.dart43-74集成 AppFlowy 的主编辑器包装器
EditorStyleCustomizereditor_style.dart31-607处理编辑器组件的样式和主题
InlineActionsServiceeditor_page.dart80-89管理提及和引用等行内操作

编辑器页面初始化包括

  • 字符和命令快捷键事件注册
  • 工具栏项目配置
  • 块组件构建器设置
  • 平台特定适配

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart153-230

EditorStyleCustomizer

EditorStyleCustomizer 为桌面和移动平台上的编辑器提供全面的样式定制功能

主要样式方法

  • headingStyleBuilder() - 根据级别配置标题文本样式
  • codeBlockStyleBuilder() - 设置代码块外观
  • selectionMenuStyleBuilder() - 自定义选择菜单颜色
  • customizeAttributeDecorator() - 处理文本属性样式

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart77-192 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart194-338

块组件系统

文档编辑器采用灵活的块状架构,其中每种内容类型都由一个块组件表示,该组件具有自己的构建器、配置和小部件实现。

块组件架构

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_configuration.dart53-102

块配置与操作

每个块组件都支持标准化的操作和配置

操作类型实现目的
OptionAction.deleteeditor_configuration.dart161删除块
OptionAction.duplicateeditor_configuration.dart162复制块
OptionAction.turnIntoeditor_configuration.dart170转换块类型
OptionAction.coloreditor_configuration.dart181更改背景颜色
OptionAction.aligneditor_configuration.dart184文本对齐

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_configuration.dart159-193

示例块实现:CalloutBlockComponent

标注块展示了典型的块组件结构

主要标注块功能

  • 使用 EmojiPickerButton 选择表情符号图标
  • 富文本内容编辑
  • 可自定义的背景颜色
  • 支持嵌套子块
  • 移动和桌面布局适配

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/callout/callout_block_component.dart18-379

编辑器插件系统

文档编辑器系统采用插件架构,通过各种编辑器插件和自定义功能扩展其功能。

插件类别

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart1-78

工具栏集成

编辑器提供全面的工具栏功能,可自定义项目

工具栏类别项 (Items)文件引用
格式化粗体、斜体、下划线、删除线editor_page.dart105
内容AI 写作、链接、代码editor_page.dart97-112
结构标题、列表、对齐editor_page.dart100-114
高级数学公式、颜色、更多选项editor_page.dart109-115

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart96-116

斜杠菜单系统

斜杠菜单提供块插入的快速访问,并支持可自定义的项目构建器

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart140-146 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_configuration.dart31-51

平台适配

文档编辑器系统为桌面和移动体验提供平台特定优化。

桌面与移动端差异

功能桌面实现移动端实现
工具栏带悬停效果的 FloatingToolbar触控优化的 AppFlowyMobileToolbar
填充EditorStyleCustomizer.documentPadding带节点填充的 EdgeInsets.zero
滚动基于跳转的导航平滑滚动动画
操作基于悬停的块操作基于触控的操作按钮

移动端特定功能

移动编辑器包括专用组件

  • 用于触控友好块操作的 MobileBlockActionButtons
  • 用于上下文编辑选项的 MobileFloatingToolbar
  • 通过 DocumentPageStyleBloc 实现触控优化的间距和尺寸调整
  • 带自定义放大镜的基于手势的文本选择

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart414-432 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart47-55 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart141-192

特定于桌面的功能

桌面端实现提供

  • 带键盘快捷键的 DesktopFloatingToolbar
  • 基于悬停的块操作菜单
  • 通过 EditorDropHandler 支持拖放
  • 针对文本渲染的窗口特定优化

来源:frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart433-475 frontend/appflowy_flutter/lib/plugins/document/document_page.dart188-210