Safe Haven 界面导览,底栏导航和首页布局
整体布局
Safe Haven 客户端用 Flutter 构建,界面设计追求简单和低数据消耗。底栏固定五个导航标签:
- 首页(For You):推荐流,包含分类、榜单、新上架
- 分类浏览(Categories):十个固定分类的入口
- 搜索(Search):独立的搜索页,支持关键词、评分筛选
- 我的应用(My Apps):查看已安装应用、更新检查
- 设置(Settings):自动更新模式、语言、调试日志等
界面语言跟随系统,但只有翻译完成度 ≥70% 的语言才会出现在应用内。Safe Haven 用 Weblate 平台做社区翻译,翻译进度公开可见。
首页 For You
打开应用默认落在这个标签,从上到下依次是:
- 顶栏:应用标题、快速访问按钮
- 轮播推荐:Banner 风格的推荐应用,只在首页 For You 出现(避免分类切换时重复渲染导致卡顿)
- Top Charts:设备端实时计算的排行榜,按评分、评分数量、全局平均值综合打分
- 分类入口:十个固定分类的快速链接
- 新上架(New Arrivals):最近同步进来的应用
Top Charts 的算法做了防刷设计——不会因为一个应用有单条 5 星评论就冲上榜首,也不会让老牌大应用靠历史评分一直霸榜。具体怎么算可以看"评分与排名"那一组。
分类页
Safe Haven 定义了十个固定分类(硬编码在服务端索引 schema 里):
- Security(安全)
- Productivity(效率)
- Utilities(实用工具)
- Communication(通讯)
- Entertainment(娱乐)
- Finance(金融)
- Health and Fitness(健康)
- Education(教育)
- Tools(工具)
- Other(其他)
打开分类页可以看到每个分类下的应用列表,每个应用卡片包含图标、名称、评分、简短描述。分类之间的切换是本地索引过滤,不需要额外网络请求。

搜索页
搜索页在底栏有独立入口。支持:
- 关键词搜索(包名或显示名)
- 评分筛选(最低评分门槛)
- 分类筛选
- 按来源筛选(已验证源码 / 未验证 / 某个上游仓库)
搜索走后端 API,不是本地索引。输入关键词后会实时拉取匹配结果。
应用详情页
点击任何一个应用卡片都会进入详情页,这是 Safe Haven 信息密度最高的页面,核心元素包括:
- 应用标题 + 包名
- 信任标志区:五个信任维度的标志一排(源码登记、已验证源码、未验证上架、APK 扫描、签名锁定)
- 源码仓库入口(如果有登记)
- 扫描结果摘要:VTTI 分析、签名哈希、扫描时间
- 版本历史:已上架的所有版本,每个版本有独立的扫描记录
- 安装按钮:滚动常驻,下滑也不会消失
- 截图画廊:最多六张截图
- 描述和发布说明

我的应用
这里列出设备上已经安装的应用中,Safe Haven 收录了的那些。每个应用显示:
- 本地版本号 vs 商店最新版本号
- 是否有更新可用
- 信任状态(比如你本地装的版本签名和商店记录是否一致)
设置页
主要选项:
- Flawless Updates 模式:Off / Lite / Full 三档
- 语言:系统默认或手动选择
- 调试日志:开启后会记录详细的网络请求和错误信息,方便排查问题
- 缓存清理:清除磁盘上缓存的图片和临时数据
数据消耗
Safe Haven 的索引同步用 BITS 协议做增量传输——第一次拉全量,之后每次只同步七天内的变更。应用图标和截图会缓存到磁盘(screenshot-home.jpg 那种方式),重复打开同一个应用不会重新下载图片。
