14 KiB
"想拍" App 产品需求文档 (PRD) - MVP版本
| 文档版本 | V1.1 (MVP) |
|---|---|
| 创建日期 | 2025年9月11日 |
| 更新日期 | 2025年9月12日 |
| 创建人 | Claude |
| 项目名称 | 想拍 (snapwish) |
| 项目描述 | Shoot What Inspires You |
1. 引言
1.1. 项目背景
许多摄影爱好者和创意工作者在日常浏览社交媒体(如微博、Twitter、Instagram、Pinterest等)时,会发现很多能激发自己拍摄灵感的图片。然而,这些图片往往散落在各个平台的收藏夹或手机相册中,难以统一管理和快速查找。当用户想要寻找拍摄灵感时,需要在多个应用和文件夹中翻找,效率低下。"想拍"旨在解决这一痛点,提供一个统一的灵感收集和管理工具。
1.2. 产品愿景
成为摄影爱好者和创意人士首选的、最便捷的拍摄灵感收集与管理应用。通过无缝的分享体验和强大的分类功能,帮助用户捕捉、整理并随时回顾每一个创意火花。
1.3. 目标用户
- 摄影爱好者:希望系统性地收集和整理摄影作品,以供学习和模仿
- 设计师/艺术家:需要收集视觉素材,构建自己的灵感库
- 内容创作者/博主:为自己的内容创作寻找视觉参考和创意灵感
- 普通用户:喜欢美好图片,希望将喜欢的图片收藏并分类管理
1.4. MVP版本范围
本次V1.1 MVP版本专注于实现核心的灵感收集和管理功能,主要目标是让用户能够通过系统分享功能快速保存图片,并提供基础的文件夹和标签管理功能,以及良好的浏览查看体验。
2. 产品功能详述
2.1. 核心功能:接收并保存分享图片
2.1.1. 从系统分享菜单接收图片
功能描述:App需要注册为系统分享菜单的目标应用。当用户在任何支持图片分享的应用中选择一张或多张图片并点击"分享"时,可以在分享列表中看到"想拍"App的图标。
用户流程:
- 用户在第三方App中看到一张喜欢的图片
- 用户长按图片或点击分享按钮,唤起系统分享菜单
- 在分享列表中,用户找到并点击"想拍"图标
- 系统显示半透明模态框覆盖在当前App上,展示图片保存界面
技术要求:
- 支持接收单张图片和多张图片(最多30张)
- 能正确处理传入的图片文件流
- 支持最大30MB的图片文件
- 支持格式:JPG、PNG、WebP、HEIC、GIF、动态WebP、APNG
2.1.2. 图片保存界面
功能描述:从分享菜单跳转过来后,展示待保存的图片预览,并提供文件夹和标签选择器,以及备注输入框。
界面元素:
- 图片预览区:清晰展示待保存的图片缩略图。多张图片时显示网格预览,可点击查看大图
- 文件夹选择器:
- 点击后弹出文件夹列表供用户选择
- 默认显示"未分类"
- 列表顶部应有"新建文件夹"的快捷入口
- 支持文件夹图标选择
- 按最近使用顺序排序
- 标签选择器:
- 输入框支持动态匹配已存在的标签,显示3个建议
- 用户可以从匹配列表中选择,也可以直接输入新标签
- 已选择的标签会显示在输入框下方,支持点击删除
- 单张图片标签数量无限制
- 单个标签字数限制:20个中文汉字长度
- 重复标签自动忽略,更新标签使用顺序
- 备注输入框(可选):多行文本框,允许用户为图片添加文字描述
- 操作模式切换:批量应用模式(默认) vs 单张编辑模式,切换时保留批量内容到单张编辑
- "保存"按钮:将图片文件保存到本地,并将元数据存入数据库
- "取消"按钮:放弃本次保存,关闭该界面
保存策略:
- 原图保存至应用专属目录
- 自动生成缩略图:长边500px,WebP格式,质量85%,保持原始比例
- 按保存日期分类存储:
/yyyy/MM/dd/ - 异步处理,避免阻塞UI
- 多张图片保存时显示进度提示
2.2. 组织与管理功能
2.2.1. 文件夹管理
功能描述:用户可以创建、重命名和删除文件夹。仅支持一级文件夹结构。
具体实现:
- 创建:用户可以在文件夹选择器或专门的文件夹页面创建新文件夹,通过弹窗形式,支持图标选择
- 查看:在"文件夹"标签页中,以网格形式展示所有文件夹及其封面(默认为该文件夹最新一张图)
- 重命名:长按文件夹或通过编辑按钮进行重命名
- 删除:删除文件夹时,其中的图片自动归类到"未分类"文件夹
- 排序:按最近使用顺序排序
2.2.2. 标签管理
功能描述:用户可以创建和删除标签,并查看所有使用特定标签的图片。
具体实现:
- 创建:在保存图片时输入新标签即可自动创建
- 查看:在"标签"管理页面,以列表形式展示所有标签
- 管理:提供标签编辑功能,支持Material Icons图标,颜色跟随主题
- 去重:按文本内容自动去重
- 图标:支持从Material Icons中选择图标,存储图标名称
- 颜色:跟随应用主题色,存储为十六进制格式
2.3. 浏览与查看功能
2.3.1. 主图库视图
功能描述:App的主界面,以瀑布流的形式展示所有已保存的图片。
具体实现:
- 布局:瀑布流网格,支持列数切换
- 手机(≤600dp):2列
- 平板(>600dp):3-4列
- 排序:默认按保存时间倒序排列
- 间距:图片间距8dp
- 加载:支持上拉加载更多,下拉刷新
- 空状态:显示简洁插画和说明文案
- 搜索框:常驻顶部
2.3.2. 图片详情页
功能描述:点击图库中的任意一张图片,进入详情页。
界面元素:
- 高清大图查看,支持手势缩放和拖动
- 滑动切换:左右滑动切换上一张/下一张,不支持循环
- 双击放大:双击放大/缩小功能
- 横竖屏适配:根据设备方向自动调整布局
- 显示图片的所属文件夹、所有标签和备注信息
- 提供"编辑"按钮,允许用户修改文件夹、标签和备注
- 提供"删除"按钮,需要二次确认后删除图片
- 提供"导出"按钮,可将图片保存到系统相册
2.3.3. 搜索功能
功能描述:在主图库顶部提供搜索功能。
具体实现:
- 搜索框:常驻顶部,支持关键词输入
- 搜索范围:文件夹名称、标签名称、备注内容
- 触发方式:点击搜索按钮触发搜索
- 搜索历史:记录最近10条搜索历史
- 搜索结果:在图库中实时展示搜索结果,不高亮匹配文字
- 空搜索:显示缺省页面
- 加载优化:搜索超过1秒时显示loading状态
2.4. 设置功能
功能描述:提供应用的基本设置选项。
设置项分组:
- 外观设置
- 语言设置:简体中文、繁体中文、English
- 主题模式:跟随系统、浅色、深色(保持一定对比度)
- 网格布局:瀑布流(默认)、等宽网格
- 存储管理
- 存储使用情况:显示当前存储占用
- 清理缓存:一键清理缩略图缓存
- 关于应用
- 版本信息:显示当前版本号
- 用户协议:链接到用户协议页面
- 隐私政策:链接到隐私政策页面
2.5. 国际化支持
支持语言:
- 简体中文(默认)
- 繁体中文
- English
文案风格:活泼友好,符合年轻用户喜好
App名称:
- 中文:想拍
- 英文:snapwish
3. 非功能性需求
3.1. 性能要求
- 启动速度:应用冷启动时间应在2秒以内
- 加载速度:图库列表滑动流畅,图片加载不应出现明显卡顿
- 响应速度:所有用户操作的响应时间应在200毫秒内
- 内存管理:合理管理大图片内存,避免OOM
- 搜索响应:搜索响应时间应在500毫秒内
3.2. 易用性要求
- UI/UX设计:界面设计简洁、直观,符合主流操作习惯
- 核心操作路径:分享→选择→保存应尽可能简短
- 空状态处理:各种空状态都有友好的提示和引导
- 首次使用:暂不增加引导,后续版本优化
3.3. 平台要求
- 技术栈:使用Flutter框架开发
- 目标平台:Android和iOS
- 最低版本:Android 7.0+,iOS 12.0+
- 设备适配:当前版本暂不考虑特殊设备适配
3.4. 数据存储要求
- 图片文件:保存在应用专属的内部存储目录
- 缩略图:单独目录保存,按日期分类存储
- 元数据:使用Hive数据库存储图片信息
- 缓存管理:智能缓存清理,30天/500MB自动清理
3.5. 图片处理要求
- 原图保存:保持原始图片质量
- 缩略图生成:长边500px,WebP格式,85%质量,保持原始比例
- 异步处理:图片处理在后台进行,不阻塞UI
- 内存优化:大图片分块加载,避免内存溢出
- 大GIF处理:提取前几帧作为缩略图,避免内存溢出
4. 界面设计规范
4.1. 视觉风格
- 设计风格:Material Design
- 主题色彩:支持动态主题色,提供5-6种预设主题色
- 图标风格:Material Icons
- 圆角规范:8dp统一圆角
- 深色模式:保持一定对比度,不完全反转
4.2. 交互规范
- 手势操作:单击、长按、滑动、双击、捏合
- 动画效果:Material标准动画,页面转场300ms
- 反馈机制:点击波纹效果、加载状态、操作结果提示
- 按钮反馈:Material标准波纹效果
4.3. 加载状态设计
- 图片加载:使用骨架屏,提供良好的加载体验
- 保存进度:多张图片保存时显示进度提示
- 搜索加载:超过1秒时显示loading状态
- 列表加载:下拉刷新和上拉加载更多
4.4. 空状态设计
- 插画风格:简洁线性插画
- 文案风格:温暖友好,具有引导性
- 操作引导:提供明确的下一步操作建议
- 具体文案:
- 首次使用:"还没有灵感?去其他App分享图片到这里吧~"
- 搜索结果为空:"换个关键词试试?或者去收集更多灵感吧!"
- 文件夹为空:"这个文件夹还在等它的第一张灵感图片"
4.5. 错误处理
- 分享失败:"出了点小问题,请重新分享试试~"
- 保存失败:"出了点小问题,请重新分享试试~"
- 存储空间不足:"出了点小问题,请重新分享试试~"
- 网络错误:当前版本暂不考虑网络相关功能
5. 数据模型规范
5.1. 核心实体
class InspirationImage {
final String id; // UUID
final String filePath; // 原图路径
final String thumbnailPath; // 缩略图路径
final String? folderId; // 文件夹ID
final List<String> tags; // 标签ID列表
final String? note; // 备注内容
final DateTime createdAt; // 创建时间(保存时间)
final DateTime updatedAt; // 更新时间
final String? originalName; // 原始文件名
final int fileSize; // 文件大小
final String mimeType; // MIME类型
final int? width; // 图片宽度
final int? height; // 图片高度
final bool isFavorite; // 是否收藏
}
class ImageFolder {
final String id; // UUID
final String name; // 文件夹名称
final String? coverImageId; // 封面图片ID
final String icon; // Material Icons名称
final DateTime createdAt; // 创建时间
final DateTime updatedAt; // 更新时间
final DateTime lastUsedAt; // 最近使用时间
}
class ImageTag {
final String id; // UUID
final String name; // 标签名称
final String icon; // Material Icons名称
final String color; // 十六进制颜色
final int usageCount; // 使用次数
final DateTime lastUsedAt; // 最近使用时间
}
5.2. 存储路径规范
应用专属目录/
├── images/ # 原图存储
│ └── yyyy/MM/dd/ # 按保存日期分类
├── thumbnails/ # 缩略图存储
│ └── yyyy/MM/dd/ # 对应原图日期
└── cache/ # 缓存目录
└── temp/ # 临时文件
6. 开发计划
6.1. MVP版本开发周期(12-17天)
Phase 1: 架构搭建(3-4天)
- 项目结构搭建和配置
- 主题和国际化基础配置
- 数据模型设计和Hive配置
- 基础组件封装
Phase 2: 分享功能(2-3天)
- 分享接收功能实现
- 图片保存界面开发
- 文件存储和缩略图生成
Phase 3: 图库展示(2-3天)
- 主图库瀑布流界面
- 空状态页面设计
- 图片加载和缓存优化
Phase 4: 管理功能(3-4天)
- 文件夹管理功能
- 标签管理系统
- 图片详情页开发
Phase 5: 搜索设置(2-3天)
- 搜索功能实现
- 设置页面开发
- 性能优化和bug修复
6.2. 后续版本规划
V1.1版本(短期)
- 批量管理功能
- 数据备份与恢复
- 多种排序方式
- 视图切换(列表/网格)
V2.0版本(中长期)
- 云同步功能
- 智能标签推荐
- 图片来源追溯
- 主题色提取功能
7. 风险评估
7.1. 技术风险
- 大文件处理:30MB GIF的内存管理需要特别注意,采用帧提取策略
- 分享兼容性:不同Android厂商的分享实现可能存在差异
- 存储权限:Android 13+的媒体权限变更需要适配
7.2. 用户体验风险
- 首次使用:没有引导流程,需要空状态设计足够友好
- 性能感知:大量图片时的流畅度需要重点优化
7.3. 缓解措施
- 实现异步图片处理,避免阻塞主线程
- 充分测试各种分享场景和设备兼容性
- 实现智能缓存和内存管理策略
- 采用虚拟滚动和图片懒加载技术
文档状态:已优化,技术细节已确认 最后更新:2025年9月12日 确认人员:产品负责人 + 技术负责人 版本说明:V1.1版本补充了所有UI/UX细节、技术规范和性能指标