# "想拍" 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 单张编辑模式,切换时保留批量内容到单张编辑 - **"保存"按钮**:将图片文件保存到本地,并将元数据存入数据库 - **"取消"按钮**:放弃本次保存,关闭该界面 **保存策略**: - 原图保存至应用专属目录 - 自动生成缩略图:长边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. 核心实体 ```dart class InspirationImage { final String id; // UUID final String filePath; // 原图路径 final String thumbnailPath; // 缩略图路径 final String? folderId; // 文件夹ID final List 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细节、技术规范和性能指标