Skip to content

Commit 7f597ab

Browse files
authored
Merge pull request #902 from jamesliauw8-rgb/feature/calendar-lunar-support
feat(calendar): 支持阴历、阳历类型 (#717)⁠
2 parents c744117 + 8773643 commit 7f597ab

44 files changed

Lines changed: 3897 additions & 714 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

IMPLEMENTATION_SUMMARY.md

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
# TDesign Flutter Calendar 农历支持功能实现总结
2+
3+
## 完成状态
4+
5+
**所有任务已完成**
6+
7+
## 实现内容
8+
9+
### 1. Flutter 开发环境搭建 ✅
10+
- 已安装 Flutter SDK (version 3.41.5, stable channel)
11+
- 配置了国内镜像加速
12+
- Xcode 已就绪(需手动接受许可协议)
13+
14+
### 2. 项目克隆和配置 ✅
15+
- 已克隆 tdesign-flutter 项目到 `/Users/JamesLiauw/Works/WorksMobile/tdesign-flutter`
16+
- 已安装所有依赖(`flutter pub get` 成功)
17+
- 项目结构分析完成
18+
19+
### 3. 核心代码实现 ✅
20+
21+
#### 新增文件:
22+
1. **`lib/src/components/calendar/td_lunar_date.dart`**
23+
- `TDLunarInfo` 类:农历日期信息模型
24+
- `TDCalendarDateType` 枚举:日历类型(solar/lunar)
25+
26+
2. **`lib/src/components/calendar/td_calendar_data_source.dart`**
27+
- `TDCalendarDataSource` 抽象接口
28+
- 提供农历转换、格式化等方法
29+
30+
#### 修改文件:
31+
1. **`lib/src/components/calendar/td_calendar.dart`**
32+
- 添加 `dateType``dataSource``showLunarInfo` 参数
33+
- 导出新增模块
34+
35+
2. **`lib/src/components/calendar/td_calendar_body.dart`**
36+
- 添加数据源支持
37+
- 在创建 `TDate` 时注入农历信息
38+
39+
3. **`lib/src/components/calendar/td_calendar_cell.dart`**
40+
- 扩展 `TDate` 添加 `lunarInfo` 字段
41+
- 实现 `_buildDefaultCell` 方法支持农历显示
42+
- 根据 `dateType``showLunarInfo` 控制显示逻辑
43+
44+
### 4. 测试用例 ✅
45+
46+
**文件:** `test/td_calendar_lunar_test.dart`
47+
48+
**覆盖范围:**
49+
- ✅ TDLunarInfo 模型创建和属性
50+
- ✅ 闰月处理
51+
- ✅ 对象比较和 hashCode
52+
- ✅ TDCalendarDataSource 格式化方法
53+
- ✅ TDate 与农历信息集成
54+
55+
**测试结果:** 8/8 通过 ✅
56+
57+
### 5. 示例代码和文档 ✅
58+
59+
#### 示例文件:
60+
1. **`example/lib/lunar_data_source_example.dart`**
61+
- 基于 lunar 包的实现示例
62+
- 包含节气和节日支持
63+
64+
2. **`example/lib/page/td_calendar_lunar_example.dart`**
65+
- 完整的交互式示例页面
66+
- 支持阳历/农历切换
67+
- 显示选中日期的双历信息
68+
69+
#### 文档文件:
70+
1. **`CALENDAR_LUNAR_README.md`**
71+
- 完整的功能说明
72+
- API 文档
73+
- 使用示例
74+
- 实现指南
75+
76+
2. **`example/assets/api/calendar_api.md`** (已更新)
77+
- 添加新参数文档
78+
79+
## API 设计
80+
81+
### 新增参数
82+
83+
| 参数 | 类型 | 默认值 | 说明 |
84+
|------|------|--------|------|
85+
| `dateType` | `TDCalendarDateType` | `TDCalendarDateType.solar` | 日历显示类型(阳历/农历) |
86+
| `dataSource` | `TDCalendarDataSource?` | `null` | 外部数据源,提供农历转换 |
87+
| `showLunarInfo` | `bool` | `false` | 阳历模式下是否显示农历副标题 |
88+
89+
### 核心类
90+
91+
```dart
92+
// 农历信息模型
93+
class TDLunarInfo {
94+
final int year, month, day;
95+
final bool isLeapMonth;
96+
final String yearText, monthText, dayText;
97+
}
98+
99+
// 数据源接口(开发者实现)
100+
abstract class TDCalendarDataSource {
101+
TDLunarInfo? getLunarInfo(DateTime solarDate);
102+
String formatDate(DateTime date, TDCalendarDateType type, [TDLunarInfo? lunarInfo]);
103+
// ... 其他可选方法
104+
}
105+
```
106+
107+
## 使用示例
108+
109+
### 基础用法(向后兼容)
110+
```dart
111+
TDCalendar(
112+
type: CalendarType.single,
113+
onChange: (dates) { },
114+
)
115+
```
116+
117+
### 农历模式
118+
```dart
119+
TDCalendar(
120+
dateType: TDCalendarDateType.lunar,
121+
dataSource: MyLunarDataSource(),
122+
onChange: (dates) { },
123+
)
124+
```
125+
126+
### 阳历+农历副标题
127+
```dart
128+
TDCalendar(
129+
dateType: TDCalendarDateType.solar,
130+
dataSource: MyLunarDataSource(),
131+
showLunarInfo: true,
132+
)
133+
```
134+
135+
## 设计特点
136+
137+
1. **数据与视图分离** - 组件不内置农历算法
138+
2. **完全向后兼容** - 不影响现有 API
139+
3. **扩展性强** - 支持任意农历库
140+
4. **轻量化** - 保持组件库体积小
141+
142+
## 代码质量
143+
144+
- ✅ 通过 `flutter analyze`(仅有风格建议,无错误)
145+
- ✅ 所有单元测试通过
146+
- ✅ 遵循 Dart 代码规范
147+
- ✅ 添加完整注释和文档
148+
149+
## 下一步建议
150+
151+
### 对于贡献者:
152+
1. ✅ 手动运行 `sudo xcodebuild -license accept` 接受 Xcode 许可
153+
2. ✅ 创建分支并提交代码:
154+
```bash
155+
cd /Users/JamesLiauw/Works/WorksMobile/tdesign-flutter
156+
git checkout -b feature/calendar-lunar-support
157+
git add .
158+
git commit -m "feat(calendar): 支持阴历阳历类型切换 (#717)"
159+
git push origin feature/calendar-lunar-support
160+
```
161+
3. ✅ 在 GitHub 上创建 Pull Request
162+
4. ✅ 关联 Issue #717
163+
164+
### 对于维护者:
165+
1. 审查代码变更
166+
2. 测试示例应用
167+
3. 确认 API 文档完整性
168+
4. 合并到主分支并发布新版本
169+
170+
## 文件清单
171+
172+
### 新增文件:
173+
- `lib/src/components/calendar/td_lunar_date.dart`
174+
- `lib/src/components/calendar/td_calendar_data_source.dart`
175+
- `test/td_calendar_lunar_test.dart`
176+
- `example/lib/lunar_data_source_example.dart`
177+
- `example/lib/page/td_calendar_lunar_example.dart`
178+
- `CALENDAR_LUNAR_README.md`
179+
180+
### 修改文件:
181+
- `lib/src/components/calendar/td_calendar.dart`
182+
- `lib/src/components/calendar/td_calendar_body.dart`
183+
- `lib/src/components/calendar/td_calendar_cell.dart`
184+
- `example/assets/api/calendar_api.md`
185+
186+
## 相关链接
187+
188+
- **Issue:** https://github.com/Tencent/tdesign-flutter/issues/717
189+
- **贡献指南:** https://tdesign.tencent.com/flutter/develop
190+
- **项目仓库:** https://github.com/Tencent/tdesign-flutter
191+
192+
---
193+
194+
**实现时间:** 2026-03-21
195+
**实现者:** AI Assistant (BoxAI)
196+
**状态:** ✅ 完成

0 commit comments

Comments
 (0)