KeyVault 应用采用 Compose Destinations 实现导航管理,将整个导航结构划分为一个根导航图和两个子导航图,各页面间通过指定的导航关系实现跳转。
根导航图
根导航图包含应用的所有核心页面,是应用的主导航入口,MainScreen
为根导航图的起始页面。
graph TD root(["RootGraph"]) -- "start" --- main_screen("MainScreen") root(["RootGraph"]) --- add_item_screen("AddItemScreen") root(["RootGraph"]) --- add_item_tag_screen("AddItemTagScreen") root(["RootGraph"]) --- add_tag_item_screen("AddTagItemScreen") root(["RootGraph"]) --- root/add_tag_screen("AddTagScreen") root(["RootGraph"]) --- auth_screen("AuthScreen") root(["RootGraph"]) --- dark_mode_screen("DarkModeScreen") root(["RootGraph"]) --- info_screen("InfoScreen") root(["RootGraph"]) --- init_screen("InitScreen") root(["RootGraph"]) --- item_info_screen("ItemInfoScreen") root(["RootGraph"]) --- item_list_screen("ItemListScreen") root(["RootGraph"]) --- modify_auth_screen("ModifyAuthScreen") root(["RootGraph"]) --- select_expiry_screen("SelectExpiryScreen") root(["RootGraph"]) --- root/select_user_item_screen("SelectUserItemScreen") root(["RootGraph"]) --- tag_item_list_screen("TagItemListScreen") root(["RootGraph"]) --- tag_list_screen("TagListScreen") root(["RootGraph"]) --- verify_screen("VerifyScreen") classDef destination fill:#5383EC,stroke:#ffffff; class add_item_screen,add_item_tag_screen,add_tag_item_screen,root/add_tag_screen,auth_screen,dark_mode_screen,info_screen,init_screen,item_info_screen,item_list_screen,main_screen,modify_auth_screen,select_expiry_screen,root/select_user_item_screen,tag_item_list_screen,tag_list_screen,verify_screen destination; classDef navgraph fill:#63BC76,stroke:#ffffff; class root navgraph;
主要页面说明如下
- MainScreen:应用主页面,包含
HomeScreen
(首页)和SettingScreen
(设置页)两个子页面,通过底部导航栏切换 - InitScreen:首次使用应用时的初始化页面,用于设置初始密钥和过期时间
- VerifyScreen:密钥验证页面,每次打开应用或超时后需要验证密钥
- AddItemScreen:添加密钥信息的入口页面,会跳转到对应的子导航图
- AuthScreen:密钥管理页面,支持修改密钥、调整过期时间和重置应用
- TagListScreen:标签管理页面,支持标签的增删改查操作
子导航图:密钥管理
用于处理添加密钥信息的完整流程,AddInputScreen
为该子导航图的起始页面。
graph TD add_item(["AddItemGraph"]) -- "start" --- add_input_screen("AddInputScreen") add_item(["AddItemGraph"]) --- add_item/add_tag_screen("AddTagScreen") add_item(["AddItemGraph"]) --- add_item/select_user_item_screen("SelectUserItemScreen") classDef destination fill:#5383EC,stroke:#ffffff; class add_input_screen,add_item/add_tag_screen,add_item/select_user_item_screen destination; classDef navgraph fill:#63BC76,stroke:#ffffff; class add_item navgraph;
页面说明如下
- AddInputScreen:添加密钥信息的主页面,可输入名称、账号、密码等信息
- AddTagScreen:添加标签页面,用于为当前密钥信息创建新标签
- SelectUserItemScreen:选择关联用户条目页面,用于建立条目间的关联关系
子导航图:标签管理
用于处理为密钥信息添加标签的相关流程,SelectTagScreen
为该子导航图的起始页面。
graph TD add_item_tag(["AddItemTagGraph"]) -- "start" --- select_tag_screen("SelectTagScreen") add_item_tag(["AddItemTagGraph"]) --- add_item_tag/add_tag_screen("AddTagScreen") classDef destination fill:#5383EC,stroke:#ffffff; class select_tag_screen,add_item_tag/add_tag_screen destination; classDef navgraph fill:#63BC76,stroke:#ffffff; class add_item_tag navgraph;
页面说明如下
- SelectTagScreen:标签选择页面,可从已有标签中选择需要关联的标签
- AddTagScreen:添加标签页面,用于创建新标签并关联到当前密钥信息
过渡动画
所有页面间的导航均采用滑动过渡动画(SlideTransitions
),具体表现为:
- 前进导航:页面从右侧滑入,左侧滑出
- 返回导航:页面从左侧滑入,右侧滑出
- 动画时长:300ms
其中 AddItemScreen
采用底部弹窗样式(DestinationStyleBottomSheet
),从屏幕底部滑入。