snap_wish/snapwish_PRD_v1.1.md
2025-09-12 18:17:35 +08:00

381 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# "想拍" 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的图标。
**用户流程**
1. 用户在第三方App中看到一张喜欢的图片
2. 用户长按图片或点击分享按钮,唤起系统分享菜单
3. 在分享列表中,用户找到并点击"想拍"图标
4. 系统显示半透明模态框覆盖在当前App上展示图片保存界面
**技术要求**
- 支持接收单张图片和多张图片最多30张
- 能正确处理传入的图片文件流
- 支持最大30MB的图片文件
- 支持格式JPG、PNG、WebP、HEIC、GIF、动态WebP、APNG
#### 2.1.2. 图片保存界面
**功能描述**:从分享菜单跳转过来后,展示待保存的图片预览,并提供文件夹和标签选择器,以及备注输入框。
**界面元素**
- **图片预览区**:清晰展示待保存的图片缩略图。多张图片时显示网格预览,可点击查看大图
- **文件夹选择器**
- 点击后弹出文件夹列表供用户选择
- 默认显示"未分类"
- 列表顶部应有"新建文件夹"的快捷入口
- 支持文件夹图标选择
- 按最近使用顺序排序
- **标签选择器**
- 输入框支持动态匹配已存在的标签显示3个建议
- 用户可以从匹配列表中选择,也可以直接输入新标签
- 已选择的标签会显示在输入框下方,支持点击删除
- 单张图片标签数量无限制
- 单个标签字数限制20个中文汉字长度
- 重复标签自动忽略,更新标签使用顺序
- **备注输入框(可选)**:多行文本框,允许用户为图片添加文字描述
- **操作模式切换**:批量应用模式(默认) vs 单张编辑模式,切换时保留批量内容到单张编辑
- **"保存"按钮**:将图片文件保存到本地,并将元数据存入数据库
- **"取消"按钮**:放弃本次保存,关闭该界面
**保存策略**
- 原图保存至应用专属目录
- 自动生成缩略图长边500pxWebP格式质量85%,保持原始比例
- 按保存日期分类存储:`/yyyy/MM/dd/`
- 异步处理避免阻塞UI
- 多张图片保存时显示进度提示
### 2.2. 组织与管理功能
#### 2.2.1. 文件夹管理
**功能描述**:用户可以创建、重命名和删除文件夹。仅支持一级文件夹结构。
**具体实现**
- **创建**:用户可以在文件夹选择器或专门的文件夹页面创建新文件夹,通过弹窗形式,支持图标选择
- **查看**:在"文件夹"标签页中,以网格形式展示所有文件夹及其封面(默认为该文件夹最新一张图)
- **重命名**:长按文件夹或通过编辑按钮进行重命名
- **删除**:删除文件夹时,其中的图片自动归类到"未分类"文件夹
- **排序**:按最近使用顺序排序
#### 2.2.2. 标签管理
**功能描述**:用户可以创建和删除标签,并查看所有使用特定标签的图片。
**具体实现**
- **创建**:在保存图片时输入新标签即可自动创建
- **查看**:在"标签"管理页面,以列表形式展示所有标签
- **管理**提供标签编辑功能支持Material Icons图标颜色跟随主题
- **去重**:按文本内容自动去重
- **图标**支持从Material Icons中选择图标存储图标名称
- **颜色**:跟随应用主题色,存储为十六进制格式
### 2.3. 浏览与查看功能
#### 2.3.1. 主图库视图
**功能描述**App的主界面以瀑布流的形式展示所有已保存的图片。
**具体实现**
- **布局**:瀑布流网格,支持列数切换
- 手机≤600dp2列
- 平板(>600dp3-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. 图片处理要求
- **原图保存**:保持原始图片质量
- **缩略图生成**长边500pxWebP格式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. 核心实体
```dart
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细节、技术规范和性能指标