本文档涵盖 AppFlowy 的导航和侧边栏系统,它为用户提供了在工作区、空间、文件夹和各个视图(文档、数据库等)之间进行导航的主要界面。该系统支持桌面和移动平台,具有不同的交互模式。
有关底层视图和文件夹管理逻辑的信息,请参阅视图和文档管理。有关工作区管理详情,请参阅用户身份验证和工作区管理。
导航系统以HomeSideBar组件为核心协调器,支持现代基于空间的导航和传统基于文件夹的组织。该系统通过各种 BLoC 组件与 AppFlowy 的状态管理深度集成。
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart51-293 frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart176-223
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart86-220 frontend/appflowy_flutter/lib/workspace/application/sidebar/space/space_bloc.dart65-386
HomeSideBar作为所有侧边栏功能的主要容器。它根据工作区配置和用户权限动态地在基于空间的导航和基于文件夹的导航之间切换。
侧边栏分为不同的部分:
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart342-420 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart424-476
侧边栏使用_renderFolderOrSpace方法在基于空间的导航和基于文件夹的导航之间动态选择。
空间导航条件
containsSpace为 true(来自SidebarSectionsBloc)spaces.isNotEmpty(来自SpaceBloc)isCollabWorkspaceOn为 true(协作工作区)文件夹导航回退
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart424-476
空间系统提供了一种现代化的分层导航结构,其中内容被组织到独立的“空间”中,每个空间都有自己的权限和内容。
SpaceBloc管理整个空间生命周期,包括创建、导航和内容管理。
来源:frontend/appflowy_flutter/lib/workspace/application/sidebar/space/space_bloc.dart70-386
SidebarSpaceHeader提供空间管理控制,包括:
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/sidebar_space_header.dart22-263 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_more_popup.dart17-211
空间支持两种权限级别:
权限系统通过SpacePermission枚举进行管理,并在后端服务中强制执行。
来源:frontend/appflowy_flutter/lib/workspace/application/sidebar/space/space_bloc.dart32-35 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/shared_widget.dart26-112
单个视图(文档、数据库、看板)由ViewItem组件表示,该组件处理显示、交互和分层组织。
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart50-216 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart221-431
每个视图项都支持通过悬停状态和上下文菜单访问的全面操作集:
主要操作
辅助操作
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart759-836 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_more_action_button.dart
导航系统协调多个状态管理组件,以提供无缝的用户交互。
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart139-181 frontend/appflowy_flutter/lib/workspace/application/sidebar/space/space_bloc.dart288-319
在空间之间导航或跨空间移动视图时,系统处理复杂的状态协调:
SpaceBloc中的当前空间来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart249-292 frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart866-896
侧边栏通过专门的搜索按钮(当搜索功能标志启用时)与 AppFlowy 的命令面板系统集成。
搜索功能与工作区和空间状态紧密集成
搜索集成流程
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/sidebar.dart548-585 frontend/appflowy_flutter/lib/workspace/presentation/command_palette/command_palette.dart
侧边栏系统通过HomeHotKeys系统支持全面的键盘导航。
侧边栏控制快捷键
Ctrl/Cmd + \ 或 Ctrl/Cmd + . - 切换侧边栏可见性Ctrl/Cmd + O - 切换到下一个空间Ctrl/Cmd + N - 创建新页面F2 - 重命名当前视图Ctrl/Cmd + P - 打开命令面板标签页导航
Ctrl/Cmd + W - 关闭当前选项卡Ctrl/Cmd + PageUp/PageDown - 在选项卡之间导航来源:frontend/appflowy_flutter/lib/workspace/presentation/home/hotkeys.dart70-212
导航系统包含移动端特有的适配,在保持功能性的同时优化了触控界面。
移动端使用底部表单和简化的交互模式
移动空间菜单(MobileSpaceMenu)提供与桌面端相同的功能,但采用适合移动设备的 UI 模式。
来源:frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_menu.dart29-67 frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_header.dart11-60
侧边栏通过DesktopHomeScreen组件与更广泛的应用程序布局集成,该组件管理定位、调整大小和动画。
布局特点
来源:frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart253-318 frontend/appflowy_flutter/lib/workspace/presentation/home/home_layout.dart
此导航和侧边栏系统为用户提供了一个全面、分层的界面,用于组织和访问其内容,同时保持了不同工作区配置和用户权限的灵活性。