feat: 实现目标列表左滑删除功能及相关组件
- 在目标列表中添加左滑删除功能,用户可通过左滑手势显示删除按钮并确认删除目标 - 修改 GoalCard 组件,使用 Swipeable 组件包装卡片内容,支持删除操作 - 更新目标列表页面,集成删除目标的逻辑,确保与 Redux 状态管理一致 - 添加开发模式下的模拟数据,方便测试删除功能 - 更新相关文档,详细描述左滑删除功能的实现和使用方法
This commit is contained in:
131
docs/goal-swipe-delete-implementation.md
Normal file
131
docs/goal-swipe-delete-implementation.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# 目标列表左滑删除功能实现
|
||||
|
||||
## 功能概述
|
||||
|
||||
为目标列表的卡片添加了左滑删除功能,用户可以通过左滑手势显示删除按钮,点击后确认删除目标。
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 1. 依赖库
|
||||
- `react-native-gesture-handler`: 提供手势处理功能
|
||||
- `@expo/vector-icons`: 提供删除图标
|
||||
|
||||
### 2. 核心组件修改
|
||||
|
||||
#### GoalCard 组件 (`components/GoalCard.tsx`)
|
||||
- 使用 `Swipeable` 组件包装原有的卡片内容
|
||||
- 添加 `renderRightActions` 方法渲染删除按钮
|
||||
- 添加删除确认对话框
|
||||
- 支持删除回调函数
|
||||
|
||||
#### 应用根布局 (`app/_layout.tsx`)
|
||||
- 添加 `GestureHandlerRootView` 包装器
|
||||
- 确保手势处理功能正常工作
|
||||
|
||||
#### 目标列表页面 (`app/goals-list.tsx`)
|
||||
- 添加删除目标的处理逻辑
|
||||
- 集成 Redux 删除 action
|
||||
- 添加开发模式下的模拟数据用于测试
|
||||
|
||||
### 3. 功能特性
|
||||
|
||||
#### 左滑手势
|
||||
- 支持左滑显示删除按钮
|
||||
- 设置合适的滑动阈值和边界
|
||||
- 自动关闭滑动状态
|
||||
|
||||
#### 删除确认
|
||||
- 显示确认对话框
|
||||
- 包含目标标题信息
|
||||
- 提供取消和确认选项
|
||||
|
||||
#### 视觉反馈
|
||||
- 红色删除按钮背景
|
||||
- 删除图标和文字
|
||||
- 圆角设计保持一致性
|
||||
|
||||
#### 状态管理
|
||||
- 集成 Redux 删除 action
|
||||
- 自动更新列表状态
|
||||
- 错误处理和提示
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 用户操作流程
|
||||
1. 在目标列表中,向左滑动任意目标卡片
|
||||
2. 删除按钮会从右侧滑出
|
||||
3. 点击删除按钮
|
||||
4. 确认删除对话框出现
|
||||
5. 选择"删除"确认或"取消"放弃
|
||||
|
||||
### 开发测试
|
||||
在开发模式下,如果 API 调用失败,会自动加载模拟数据进行测试:
|
||||
- 每日运动30分钟
|
||||
- 每天喝8杯水
|
||||
- 每周读书2小时
|
||||
|
||||
## 代码结构
|
||||
|
||||
```typescript
|
||||
// GoalCard 组件结构
|
||||
<Swipeable
|
||||
ref={swipeableRef}
|
||||
renderRightActions={renderRightActions}
|
||||
rightThreshold={40}
|
||||
overshootRight={false}
|
||||
>
|
||||
<TouchableOpacity>
|
||||
{/* 原有的卡片内容 */}
|
||||
</TouchableOpacity>
|
||||
</Swipeable>
|
||||
```
|
||||
|
||||
## 样式设计
|
||||
|
||||
### 删除按钮样式
|
||||
```typescript
|
||||
deleteButton: {
|
||||
backgroundColor: '#EF4444',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
width: 80,
|
||||
height: '100%',
|
||||
borderTopRightRadius: 16,
|
||||
borderBottomRightRadius: 16,
|
||||
marginBottom: 12,
|
||||
}
|
||||
```
|
||||
|
||||
### 删除按钮文字样式
|
||||
```typescript
|
||||
deleteButtonText: {
|
||||
color: '#FFFFFF',
|
||||
fontSize: 12,
|
||||
fontWeight: '600',
|
||||
marginTop: 4,
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **手势处理**: 必须使用 `GestureHandlerRootView` 包装应用
|
||||
2. **类型安全**: 确保所有必要的字段都正确设置
|
||||
3. **错误处理**: 删除失败时显示错误提示
|
||||
4. **用户体验**: 提供确认对话框防止误删
|
||||
5. **性能优化**: 使用 `useRef` 管理 Swipeable 引用
|
||||
|
||||
## 扩展功能
|
||||
|
||||
可以考虑添加的其他功能:
|
||||
- 批量删除
|
||||
- 撤销删除
|
||||
- 删除动画效果
|
||||
- 更多操作按钮(编辑、暂停等)
|
||||
|
||||
## 测试建议
|
||||
|
||||
1. **手势测试**: 测试不同滑动距离和速度
|
||||
2. **边界测试**: 测试快速连续滑动
|
||||
3. **状态测试**: 测试删除后的列表更新
|
||||
4. **错误测试**: 测试网络错误时的处理
|
||||
5. **UI测试**: 测试不同屏幕尺寸下的显示效果
|
||||
158
docs/goals-list-implementation.md
Normal file
158
docs/goals-list-implementation.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# 目标列表功能实现文档
|
||||
|
||||
## 功能概述
|
||||
|
||||
基于图片中的习惯列表样式,我们创建了一个全新的目标列表页面,高保真还原了设计稿的视觉效果,并将内容替换为目标相关的内容。
|
||||
|
||||
## 新增文件
|
||||
|
||||
### 1. 目标列表页面 (`app/goals-list.tsx`)
|
||||
- 完整的目标列表展示
|
||||
- 支持筛选不同状态的目标
|
||||
- 下拉刷新和加载更多功能
|
||||
- 响应式设计和主题适配
|
||||
|
||||
### 2. 目标卡片组件 (`components/GoalCard.tsx`)
|
||||
- 可复用的目标卡片组件
|
||||
- 支持显示目标状态、重复类型、提醒等信息
|
||||
- 智能图标选择(根据目标内容自动选择合适图标)
|
||||
- 支持点击事件和状态显示控制
|
||||
|
||||
### 3. 目标筛选组件 (`components/GoalFilterTabs.tsx`)
|
||||
- 支持按状态筛选目标(全部、进行中、已暂停、已完成、已取消)
|
||||
- 显示各状态的目标数量
|
||||
- 美观的标签式设计
|
||||
|
||||
### 4. 目标详情页面 (`app/goal-detail.tsx`)
|
||||
- 显示单个目标的详细信息
|
||||
- 目标统计信息(已完成、目标、进度)
|
||||
- 目标属性信息(状态、重复类型、时间等)
|
||||
- 完成记录列表
|
||||
|
||||
## 设计特点
|
||||
|
||||
### 视觉设计
|
||||
- **高保真还原**: 完全按照图片中的习惯列表样式设计
|
||||
- **卡片式布局**: 白色圆角卡片,带有阴影效果
|
||||
- **图标设计**: 紫色主题图标,带有白色星星装饰
|
||||
- **信息层次**: 清晰的信息层次结构,主标题 + 详细信息行
|
||||
|
||||
### 交互设计
|
||||
- **点击反馈**: 卡片点击有视觉反馈
|
||||
- **筛选功能**: 支持按状态筛选目标
|
||||
- **导航流畅**: 支持导航到目标详情页面
|
||||
- **下拉刷新**: 支持下拉刷新数据
|
||||
|
||||
## 数据结构映射
|
||||
|
||||
### 图片中的习惯信息 → 目标信息
|
||||
| 图片元素 | 目标对应 | 说明 |
|
||||
|---------|---------|------|
|
||||
| 习惯标题 | 目标标题 | 显示目标名称 |
|
||||
| +1 | 积分 | 显示目标完成获得的积分 |
|
||||
| 目标数量 | 目标数量/频率 | 显示目标的目标数量或频率 |
|
||||
| 提醒图标 | 提醒设置 | 如果目标有提醒则显示 |
|
||||
| 提醒时间 | 提醒时间 | 显示具体的提醒时间 |
|
||||
| 重复图标 | 重复类型 | 显示循环图标 |
|
||||
| 重复类型 | 重复类型 | 显示"每日"、"每周"、"每月" |
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 智能图标选择
|
||||
根据目标标题和类别自动选择合适图标:
|
||||
- 运动相关:`fitness-center`
|
||||
- 饮水相关:`local-drink`
|
||||
- 睡眠相关:`bedtime`
|
||||
- 学习相关:`school`
|
||||
- 冥想相关:`self-improvement`
|
||||
- 饮食相关:`restaurant`
|
||||
- 默认:`flag`
|
||||
|
||||
### 2. 状态管理
|
||||
- 使用Redux进行状态管理
|
||||
- 支持分页加载
|
||||
- 错误处理和加载状态
|
||||
- 筛选状态保持
|
||||
|
||||
### 3. 响应式设计
|
||||
- 适配不同屏幕尺寸
|
||||
- 支持浅色/深色主题
|
||||
- 流畅的动画效果
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 1. 访问目标列表
|
||||
在目标页面点击"列表"按钮,或直接访问 `/goals-list` 路由。
|
||||
|
||||
### 2. 筛选目标
|
||||
使用顶部的筛选标签,可以按状态筛选目标:
|
||||
- 全部:显示所有目标
|
||||
- 进行中:显示正在进行的目标
|
||||
- 已暂停:显示已暂停的目标
|
||||
- 已完成:显示已完成的目标
|
||||
- 已取消:显示已取消的目标
|
||||
|
||||
### 3. 查看目标详情
|
||||
点击任意目标卡片,可以查看目标的详细信息。
|
||||
|
||||
### 4. 刷新数据
|
||||
下拉列表可以刷新目标数据。
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 组件架构
|
||||
```
|
||||
GoalsListScreen
|
||||
├── GoalFilterTabs (筛选标签)
|
||||
└── FlatList
|
||||
└── GoalCard (目标卡片)
|
||||
├── 图标区域
|
||||
├── 内容区域
|
||||
└── 状态指示器
|
||||
```
|
||||
|
||||
### 状态管理
|
||||
- 使用Redux Toolkit管理目标数据
|
||||
- 支持分页和筛选状态
|
||||
- 错误处理和加载状态
|
||||
|
||||
### 样式系统
|
||||
- 使用StyleSheet进行样式管理
|
||||
- 支持主题切换
|
||||
- 响应式设计
|
||||
|
||||
## 扩展功能
|
||||
|
||||
### 1. 搜索功能
|
||||
可以添加搜索框,支持按标题搜索目标。
|
||||
|
||||
### 2. 排序功能
|
||||
可以添加排序选项,按创建时间、优先级等排序。
|
||||
|
||||
### 3. 批量操作
|
||||
可以添加批量选择、批量操作功能。
|
||||
|
||||
### 4. 统计图表
|
||||
可以添加目标完成情况的统计图表。
|
||||
|
||||
## 测试建议
|
||||
|
||||
### 1. 功能测试
|
||||
- 测试目标列表加载
|
||||
- 测试筛选功能
|
||||
- 测试点击导航
|
||||
- 测试下拉刷新
|
||||
|
||||
### 2. 样式测试
|
||||
- 测试不同屏幕尺寸
|
||||
- 测试主题切换
|
||||
- 测试长文本显示
|
||||
|
||||
### 3. 性能测试
|
||||
- 测试大量数据加载
|
||||
- 测试内存使用情况
|
||||
- 测试滚动性能
|
||||
|
||||
## 总结
|
||||
|
||||
新创建的目标列表功能完全按照设计稿实现,提供了良好的用户体验和完整的功能支持。通过模块化的组件设计,代码具有良好的可维护性和可扩展性。
|
||||
Reference in New Issue
Block a user