Flutter 框架跨平台鸿蒙开发 - 节气生活

节气生活应用


欢迎加入开源鸿蒙跨平台社区:

https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

1.1 应用简介

节气生活是一款基于中国传统二十四节气的生活指导应用,旨在帮助用户顺应自然规律,按照节气安排生活节奏。应用结合了传统节气文化与现代生活方式,为用户提供个性化的养生建议、饮食推荐和活动安排。

应用以绿色为主色调,象征自然与生机。界面设计简洁优雅,融入了大量中国传统文化元素。通过智能算法识别当前节气,为用户提供实时的节气信息和生活指导,帮助用户在快节奏的现代生活中找到与自然和谐相处的方式。

1.2 核心功能

功能模块 功能描述 实现方式
节气识别 自动识别当前节气 日期计算算法
今日首页 展示当前节气信息 卡片式布局
节气日历 24节气完整展示 网格布局
养生建议 节气养生知识推荐 列表展示
美食推荐 节气饮食建议 横向滚动
活动建议 节气传统活动 标签展示
任务管理 节气生活任务 任务列表
知识科普 节气文化知识 文章展示

1.3 二十四节气

应用包含完整的二十四节气信息:

季节 节气 时间 含义
立春 2月3-5日 春季开始
雨水 2月18-20日 降雨开始
惊蛰 3月5-7日 春雷乍动
春分 3月20-22日 昼夜平分
清明 4月4-6日 天气清朗
谷雨 4月19-21日 雨生百谷
立夏 5月5-7日 夏季开始
小满 5月20-22日 麦粒饱满
芒种 6月5-7日 有芒作物成熟
夏至 6月21-22日 白昼最长
小暑 7月6-8日 天气炎热
大暑 7月22-24日 最热时期
立秋 8月7-9日 秋季开始
处暑 8月22-24日 暑气渐消
白露 9月7-9日 露凝而白
秋分 9月22-24日 昼夜平分
寒露 10月8-9日 露水寒冷
霜降 10月23-24日 开始降霜
立冬 11月7-8日 冬季开始
小雪 11月22-23日 开始降雪
大雪 12月6-8日 雪量增多
冬至 12月21-23日 白昼最短
小寒 1月5-7日 天气寒冷
大寒 1月20-21日 最冷时期

1.4 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 setState -
动画系统 AnimationController -
目标平台 鸿蒙OS / Web API 21+

1.5 项目结构

复制代码
lib/
└── main_solar_terms_life.dart
    ├── SolarTermsLifeApp           # 应用入口
    ├── SolarTermSeason             # 季节枚举
    ├── SolarTerm                   # 节气模型
    ├── DailyTask                   # 每日任务模型
    ├── SolarTermsLifeHomePage      # 主页面(底部导航)
    ├── _buildHomePage              # 今日页面
    ├── _buildCalendarPage          # 节气日历页面
    ├── _buildTasksPage             # 任务页面
    └── _buildKnowledgePage         # 知识页面

二、设计理念

2.1 天人合一思想

天人合一
顺应自然
节气养生
生活节奏
春生夏长
秋收冬藏
因时制宜
饮食调养
起居有常
情志调摄
早睡早起
适度运动
劳逸结合

2.2 节气生活理念

节气生活
春季养生
养肝护肝
调畅情志
适度运动
防风保暖
夏季养生
养心安神
清热解暑
晚睡早起
防暑降温
秋季养生
养肺润燥
早睡早起
防寒保暖
滋阴润燥
冬季养生
养肾防寒
早睡晚起
温补为主
适度运动

2.3 四季色彩体系

应用采用四季色彩体系,每个季节都有独特的主题色:

季节 主色 辅助色 象征意义
#81C784 (嫩绿) #A5D6A7 生机、希望、新生
#FFB74D (橙黄) #FFCC80 热情、活力、阳光
#FFB300 (金黄) #FFD54F 收获、成熟、稳重
#64B5F6 (天蓝) #90CAF9 宁静、纯洁、内敛

2.4 节气文化传承

节气文化
天文历法
农业生产
民俗活动
养生智慧
太阳黄经
时间节点
农事指导
物候观察
传统习俗
节庆活动
饮食养生
起居调养


三、系统架构

3.1 整体架构图

Data Layer
Business Layer
Presentation Layer
主页面

SolarTermsLifeHomePage
今日页
节气日历页
任务页
知识页
当前节气卡片
倒计时卡片
养生建议
美食推荐
节气网格
节气详情
任务列表
知识卡片
节气识别引擎

日期计算
推荐系统

养生建议
任务管理

任务状态
SolarTerm

节气模型
DailyTask

任务模型
SolarTermSeason

季节枚举

3.2 类图设计

manages
manages
belongs to
SolarTermsLifeApp
+Widget build()
<<enumeration>>
SolarTermSeason
+spring 春
+summer 夏
+autumn 秋
+winter 冬
+String label
+String emoji
+Color color
SolarTerm
+int index
+String name
+String pinyin
+String date
+SolarTermSeason season
+String meaning
+String phenomenon
+List<String> foods
+List<String> activities
+List<String> healthTips
+String poem
+String poemAuthor
DailyTask
+String id
+String title
+String description
+String category
+bool completed
+DateTime date
SolarTermsLifeHomePage
-int _currentIndex
-List<SolarTerm> _solarTerms
-List<DailyTask> _tasks
-SolarTerm _currentTerm
-SolarTerm _nextTerm
-int _daysToNextTerm
-AnimationController _rotationController
+SolarTerm _getCurrentSolarTerm()
+SolarTerm _getNextSolarTerm()
+int _calculateDaysToNextTerm()

3.3 节气识别流程

节气数据 日期计算 节气引擎 应用启动 节气数据 日期计算 节气引擎 应用启动 初始化节气数据 加载24节气信息 获取当前节气 计算当前日期 匹配节气日期 返回当前节气 计算下一节气 查找下一节气 返回下一节气 计算倒计时 返回天数 返回节气信息


四、核心功能实现

4.1 节气数据模型

节气模型包含完整的节气信息:

dart 复制代码
class SolarTerm {
  final int index;              // 节气序号(1-24)
  final String name;            // 节气名称
  final String pinyin;          // 拼音
  final String date;            // 日期范围
  final SolarTermSeason season; // 所属季节
  final String meaning;         // 节气含义
  final String phenomenon;      // 物候现象
  final List<String> foods;     // 节气美食
  final List<String> activities;// 节气活动
  final List<String> healthTips;// 养生建议
  final String poem;            // 节气诗词
  final String poemAuthor;      // 诗词作者
}

节气数据示例:

dart 复制代码
SolarTerm(
  index: 1,
  name: '立春',
  pinyin: 'Lì Chūn',
  date: '2月3-5日',
  season: SolarTermSeason.spring,
  meaning: '春季开始,万物复苏',
  phenomenon: '东风解冻,蛰虫始振,鱼陟负冰',
  foods: ['春饼', '萝卜', '姜', '葱', '韭菜'],
  activities: ['迎春', '咬春', '踏青', '放风筝'],
  healthTips: ['早睡早起', '适当运动', '调养肝脏', '防寒保暖'],
  poem: '春度春归无限春,今朝方始觉成人。',
  poemAuthor: '罗隐',
)

4.2 节气识别算法

节气识别是应用的核心功能:

dart 复制代码
SolarTerm _getCurrentSolarTerm() {
  final now = DateTime.now();
  final month = now.month;
  final day = now.day;

  // 24节气的日期范围
  final solarTermDates = [
    [2, 4], [2, 19], [3, 6], [3, 21], [4, 5], [4, 20],
    [5, 6], [5, 21], [6, 6], [6, 21], [7, 7], [7, 23],
    [8, 8], [8, 23], [9, 8], [9, 23], [10, 8], [10, 24],
    [11, 8], [11, 22], [12, 7], [12, 22], [1, 6], [1, 20],
  ];

  // 从后往前查找当前节气
  for (int i = solarTermDates.length - 1; i >= 0; i--) {
    final termMonth = solarTermDates[i][0];
    final termDay = solarTermDates[i][1];

    if (month > termMonth || (month == termMonth && day >= termDay)) {
      return _solarTerms[i];
    }
  }

  // 如果没找到,返回最后一个节气(大寒)
  return _solarTerms[23];
}

4.3 倒计时计算

计算距离下一个节气的天数:

dart 复制代码
int _calculateDaysToNextTerm() {
  final now = DateTime.now();
  final nextTermIndex = _nextTerm.index - 1;

  // 获取下一节气的日期
  final solarTermDates = [
    [2, 4], [2, 19], [3, 6], [3, 21], [4, 5], [4, 20],
    [5, 6], [5, 21], [6, 6], [6, 21], [7, 7], [7, 23],
    [8, 8], [8, 23], [9, 8], [9, 23], [10, 8], [10, 24],
    [11, 8], [11, 22], [12, 7], [12, 22], [1, 6], [1, 20],
  ];

  final nextDate = solarTermDates[nextTermIndex];
  var nextTermDate = DateTime(now.year, nextDate[0], nextDate[1]);

  // 如果下一节气日期已过,则计算下一年的
  if (nextTermDate.isBefore(now)) {
    nextTermDate = DateTime(now.year + 1, nextDate[0], nextDate[1]);
  }

  return nextTermDate.difference(now).inDays;
}

4.4 当前节气卡片

展示当前节气信息的核心组件:

dart 复制代码
Widget _buildCurrentTermCard() {
  return Container(
    width: double.infinity,
    padding: const EdgeInsets.all(24),
    decoration: BoxDecoration(
      gradient: LinearGradient(
        colors: [
          _currentTerm.season.color,
          _currentTerm.season.color.withValues(alpha: 0.7),
        ],
      ),
      borderRadius: BorderRadius.circular(24),
    ),
    child: Column(
      children: [
        // 节气名称和拼音
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_currentTerm.season.emoji, style: TextStyle(fontSize: 32)),
            SizedBox(width: 12),
            Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  _currentTerm.name,
                  style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold),
                ),
                Text(_currentTerm.pinyin),
              ],
            ),
          ],
        ),
        // 节气含义
        Text(_currentTerm.meaning),
        // 节气序号和日期
        Container(
          child: Text('第${_currentTerm.index}个节气 · ${_currentTerm.date}'),
        ),
      ],
    ),
  );
}

4.5 节气美食推荐

展示节气相关的美食:

dart 复制代码
Widget _buildFoodRecommendations() {
  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Text('节气美食', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
      SizedBox(height: 12),
      SizedBox(
        height: 120,
        child: ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: _currentTerm.foods.length,
          itemBuilder: (context, index) {
            final food = _currentTerm.foods[index];
            return Container(
              width: 100,
              margin: EdgeInsets.only(right: 12),
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.circular(16),
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  // 美食图标
                  Container(
                    width: 50,
                    height: 50,
                    decoration: BoxDecoration(
                      color: _currentTerm.season.color.withValues(alpha: 0.1),
                      shape: BoxShape.circle,
                    ),
                    child: Text(_getFoodEmoji(food), style: TextStyle(fontSize: 24)),
                  ),
                  SizedBox(height: 8),
                  Text(food, style: TextStyle(fontSize: 13)),
                ],
              ),
            );
          },
        ),
      ),
    ],
  );
}

五、UI设计规范

5.1 配色方案

应用采用四季色彩体系:

季节 主色 RGB 用途
#81C784 129,199,132 春季节气主题色
#FFB74D 255,183,77 夏季节气主题色
#FFB300 255,179,0 秋季节气主题色
#64B5F6 100,181,246 冬季节气主题色

5.2 字体规范

元素 字号 字重 颜色
节气名称 36px Bold 季节主题色
页面标题 24-28px Bold #000000
节气拼音 14-16px Regular #666666
节气含义 16px Regular #FFFFFF
养生建议 15px Regular #000000
辅助文字 12-13px Regular #999999

5.3 组件规范

5.3.1 节气卡片
复制代码
┌─────────────────────────────────────────┐
│                                         │
│            🌸  立春                     │
│               Lì Chūn                   │
│                                         │
│        春季开始,万物复苏                │
│                                         │
│         第1个节气 · 2月3-5日             │
│                                         │
└─────────────────────────────────────────┘
5.3.2 倒计时卡片
复制代码
┌─────────────────────────────────────────┐
│  📅 下一个节气                           │
│                                         │
│     雨水          │        15           │
│   2月18-20日      │       天后          │
│                                         │
└─────────────────────────────────────────┘
5.3.3 养生建议卡片
复制代码
┌─────────────────────────────────────────┐
│  ①  早睡早起                             │
│      顺应节气,调整作息时间               │
└─────────────────────────────────────────┘

六、交互设计

6.1 应用启动流程

UI组件 节气引擎 应用 用户 UI组件 节气引擎 应用 用户 打开应用 初始化节气数据 加载24节气信息 获取当前节气 计算当前日期 返回当前节气 获取下一节气 返回下一节气 计算倒计时 返回天数 渲染今日页面 展示节气信息

6.2 节气切换流程

关闭
查看美食
查看活动
查看养生
用户浏览节气日历
点击节气卡片
显示节气详情
用户操作
返回日历页面
展示节气美食
展示节气活动
展示养生建议

6.3 页面切换状态

点击节气Tab
点击任务Tab
点击知识Tab
点击今日Tab
点击任务Tab
点击知识Tab
点击今日Tab
点击节气Tab
点击知识Tab
点击今日Tab
点击节气Tab
点击任务Tab
今日页
节气日历页
任务页
知识页


七、节气数据设计

7.1 节气信息完整性

每个节气包含完整的信息:

信息类型 内容 用途
基本信息 名称、拼音、日期 节气识别
季节信息 所属季节、主题色 UI展示
文化信息 含义、物候现象 知识科普
生活指导 美食、活动、养生 生活建议
文化传承 诗词、作者 文化教育

7.2 节气美食设计原则

设计节气美食时应考虑:
节气美食设计
时令性
地域性
养生性
文化性
当季食材
新鲜健康
地方特色
传统习俗
养生功效
营养均衡
文化内涵
历史传承

7.3 养生建议设计原则

设计养生建议时应遵循:

  1. 科学性:基于中医养生理论
  2. 实用性:简单易行,适合日常生活
  3. 季节性:符合节气特点
  4. 个性化:考虑不同人群需求

7.4 节气诗词选择

选择节气诗词时应考虑:

  • 相关性:诗词内容与节气相关
  • 知名度:选择广为人知的经典诗词
  • 教育性:具有文化教育意义
  • 美感:具有艺术美感

八、扩展功能规划

8.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 节气数据 节气识别 今日页面 节气日历 任务提醒 节气通知 分享功能 个人定制 AI养生建议 社区分享 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 节气生活开发计划

8.2 功能扩展建议

8.2.1 节气提醒

在节气到来前提醒用户:

  • 节气到来提醒
  • 养生建议推送
  • 美食推荐通知
  • 活动安排提醒
8.2.2 个人定制

根据用户情况定制建议:

  • 体质类型识别
  • 个性化养生方案
  • 饮食偏好设置
  • 运动习惯记录
8.2.3 社区分享

建立节气生活社区:

  • 分享节气体验
  • 交流养生心得
  • 美食制作分享
  • 活动组织

九、注意事项

9.1 开发注意事项

  1. 节气日期:节气日期每年略有变化,需要精确计算

  2. 状态管理:使用setState管理本地状态

  3. 性能优化:节气数据较大,注意内存管理

  4. 用户体验:保持界面简洁,避免信息过载

9.2 常见问题

问题 原因 解决方案
节气识别错误 日期计算错误 检查节气日期数组
颜色不更新 季节未正确识别 检查_currentTerm
倒计时不准确 日期计算错误 检查_calculateDaysToNextTerm
美食图标不显示 emoji映射缺失 添加新的emoji映射

9.3 使用提示

🌸 节气生活使用小贴士 🌸

顺应节气,调养身心,天人合一。

每个节气都有独特的养生智慧。

品尝当季美食,感受自然馈赠。

参与传统活动,传承文化精髓。

提示:节气养生建议仅供参考,具体情况请咨询专业人士。


十、运行说明

10.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

10.2 运行命令

bash 复制代码
# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_solar_terms_life.dart --web-port 8124

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_solar_terms_life.dart

# 运行到Windows
flutter run -d windows -t lib/main_solar_terms_life.dart

# 代码分析
flutter analyze lib/main_solar_terms_life.dart

十一、总结

节气生活是一款基于中国传统二十四节气的生活指导应用,通过智能识别当前节气,为用户提供个性化的养生建议、饮食推荐和活动安排。应用融合了传统节气文化与现代生活方式,帮助用户在快节奏的现代生活中找到与自然和谐相处的方式。

从技术实现来看,应用使用日期计算算法识别当前节气,通过节气数据模型存储完整的节气信息,采用四季色彩体系设计界面主题,使用卡片式布局展示节气信息。从文化传承来看,应用包含了完整的二十四节气信息,每个节气都有详细的含义、物候现象、美食推荐、活动建议和养生知识,还配有经典诗词,让用户在了解节气的同时感受传统文化的魅力。

应用不仅是一个节气查询工具,更是一个生活指导平台。它提醒我们:顺应节气,调养身心,天人合一;每个节气都有独特的养生智慧;品尝当季美食,感受自然馈赠;参与传统活动,传承文化精髓。在快节奏的现代生活中,节气生活为我们提供了一种回归自然、顺应天时的生活方式。

春雨惊春清谷天,夏满芒夏暑相连
秋处露秋寒霜降,冬雪雪冬小大寒


相关推荐
世人万千丶1 小时前
Flutter 框架跨平台鸿蒙开发 - 情绪过山车应用
flutter
李李李勃谦1 小时前
Flutter 框架跨平台鸿蒙开发 - 月亮同步
flutter·华为·harmonyos
特立独行的猫a2 小时前
HarmonyOS鸿蒙PC的QT应用开发:(一、开发环境搭建及第一个HelloWorld)
qt·华为·harmonyos·鸿蒙pc
2301_822703202 小时前
鸿蒙flutter框架Error: 00625004 SymLink Dir Failed解决方案
flutter·华为·开源·harmonyos·鸿蒙
梁山好汉(Ls_man)2 小时前
建议鸿蒙系统增加虚拟鼠标功能
华为·计算机外设·harmonyos
前端技术2 小时前
ArkTS第三章:声明式UI开发实战
java·前端·人工智能·python·华为·鸿蒙
世人万千丶2 小时前
Flutter 框架跨平台鸿蒙开发 - 嫉妒分析器应用
学习·flutter·华为·开源·harmonyos·鸿蒙
葱段2 小时前
Flutter 设置Android System Navigation/Status Bar背景色
android·flutter
人间打气筒(Ada)2 小时前
「码动四季·开源同行」HarmonyOS应用开发:鸿蒙系统概述
华为·harmonyos·deveco studio·鸿蒙开发·鸿蒙开发入门