菜单

数据库 UI 组件与渲染

相关源文件

本文档涵盖了 AppFlowy 中用于显示数据库视图的用户界面组件和渲染系统。它重点介绍处理跨不同视图类型(网格、看板、日历)和平台(移动端、桌面端)的数据库数据视觉呈现的 Flutter 前端组件。

有关底层数据库管理和数据结构的信息,请参阅数据库和协作系统。有关更广泛的数据库视图系统架构,请参阅数据库视图系统

数据库视图组件架构

AppFlowy 的数据库 UI 系统围绕模块化组件架构构建,支持多种视图类型并提供针对平台定制的适应。

来源:frontend/appflowy_flutter/lib/mobile/presentation/database/board/widgets/mobile_board_trailing.dart1-142 frontend/appflowy_flutter/lib/mobile/presentation/database/mobile_calendar_events_screen.dart1-109 frontend/appflowy_flutter/lib/workspace/application/settings/appearance/mobile_appearance.dart1-285 frontend/appflowy_flutter/lib/workspace/application/settings/appearance/desktop_appearance.dart1-160

主题与外观系统

数据库 UI 组件利用一套全面的主题系统,通过 BaseAppearance 类层次结构提供平台特定的视觉样式。

移动端数据库主题

MobileAppearance 类定义了移动平台上数据库组件的特定配色方案和样式

主题属性浅色主题深色主题用途
主色#00BCF0#00BCF0数据库操作按钮,高亮
次要背景色#f7f8fc#2d2d2d分组卡片,属性背景
主要容器#F1F1F4不适用分组卡片标题
第三主色#858585#858585隐藏分组标题,卡片文本

移动端主题系统为数据库特定元素提供专业化样式

来源:frontend/appflowy_flutter/lib/workspace/application/settings/appearance/mobile_appearance.dart36-56

桌面端数据库主题

DesktopAppearance 类利用灵活的主题系统,为桌面优化数据库组件提供样式

  • 对主要数据库操作使用 theme.primary
  • 对页面标题悬停效果应用 theme.hoverBG1
  • 利用 theme.selector 设置值悬停状态
  • 采用 theme.toolbarColor 进行编辑器工具栏样式设置

来源:frontend/appflowy_flutter/lib/workspace/application/settings/appearance/desktop_appearance.dart22-48

看板视图组件

看板视图实现了一个看板风格的界面,具有用于分组管理和卡片操作的交互式组件。

MobileBoardTrailing 组件

MobileBoardTrailing 小部件通过基于切换的编辑界面处理新看板分组的创建

该组件使用 screenSize.width * 0.7 进行响应式尺寸调整,以适应不同的移动屏幕尺寸,并通过 BoardEvent.createGroup() 操作,利用 BoardBloc 进行状态管理。

来源:frontend/appflowy_flutter/lib/mobile/presentation/database/board/widgets/mobile_board_trailing.dart28-141

日历视图组件

日历视图系统提供基于事件的数据库可视化,并配有专门的事件管理屏幕。

MobileCalendarEventsScreen

MobileCalendarEventsScreen 处理特定日期的日历事件显示和交互

该屏幕实现了动态事件列表管理,当新事件与当前日期匹配时,会自动从 CalendarState.newEvent 中添加。空状态通过 MobileCalendarEventsEmpty 组件处理。

来源:frontend/appflowy_flutter/lib/mobile/presentation/database/mobile_calendar_events_screen.dart13-108

跨平台渲染差异

数据库组件根据平台限制和交互模式调整其渲染

移动端适配

  • 对凸起按钮进行触控优化的尺寸调整,使用 Size.fromHeight(48)
  • 使用 MediaQuery 屏幕尺寸进行响应式宽度计算
  • 简化交互模式,减少悬停状态
  • 平台特定的字体大小:移动端 12px,桌面端 14px

桌面端适配

  • 通过 theme.hoverBG1 及相关属性进行悬停状态管理
  • 通过 ScrollbarThemeData 配置进行精确滚动条主题设置
  • 通过 VisualDensity.standard 进行桌面端特定的视觉密度设置
  • 使用更小字体大小(FontSizes.s11)的增强型工具提示样式

来源:frontend/appflowy_flutter/lib/workspace/application/settings/appearance/mobile_appearance.dart107-129 frontend/appflowy_flutter/lib/workspace/application/settings/appearance/desktop_appearance.dart83-93 frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/snap_bar.dart18-22

组件交互流程

数据库 UI 组件遵循一致的交互模式,利用 Flutter 的 BLoC 架构进行状态管理

这种模式确保了所有数据库视图类型之间的数据流一致性,同时保持了 UI 呈现与业务逻辑的分离。

来源:frontend/appflowy_flutter/lib/mobile/presentation/database/board/widgets/mobile_board_trailing.dart73-77 frontend/appflowy_flutter/lib/mobile/presentation/database/mobile_calendar_events_screen.dart55-56