欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260407225833992

image-20260407225844830

image-20260407225851550

image-20260407225855610

1.1 应用简介

每日一问是一款启发思考的哲学问答应用,核心理念是"每天一个哲学问题,没有标准答案"。应用每天为用户推送一个精心挑选的哲学问题,涵盖存在、自由、道德、意识、时间、意义六大主题,引导用户进行深度思考,记录思想轨迹。

在这个快节奏的时代,人们往往忙于琐事而忽略了思考的本质。每日一问应用通过简洁优雅的界面设计,每天提供一个引人深思的问题,没有标准答案,只有个人的思考与感悟。用户可以记录自己的思考过程,回顾过往的思想轨迹,在日积月累中构建属于自己的哲学体系。

1.2 核心功能

功能模块 功能描述 实现方式
今日问题 展示每日哲学问题 日期驱动算法
思考记录 记录个人思考内容 TextField输入
历史回顾 查看过往问题和思考 列表展示
问题收藏 收藏喜欢的问题 状态管理
思考统计 统计思考数据 数据聚合
问题分类 按主题分类展示 Tab切换

1.3 哲学问题分类

序号 分类名称 Emoji 主题色 核心议题
1 存在 🌌 #673AB7 存在的本质、生命的意义
2 自由 🕊️ #2196F3 自由意志、选择与命运
3 道德 ⚖️ #4CAF50 伦理道德、善恶判断
4 意识 🧠 #FF9800 意识本质、心灵哲学
5 时间 #00BCD4 时间本质、过去未来
6 意义 💫 #E91E63 人生意义、价值追求

1.4 问题示例库

┌─────────────────────────────────────────────────────────┐
│                   哲学问题示例库                          │
├─────────────────────────────────────────────────────────┤
│  🌌 存在                                                 │
│    • 如果一棵树在森林中倒下,没有人听见,它发出声音了吗?   │
│    • 我们如何证明自己不是在梦境中?                       │
│    • 存在先于本质,还是本质先于存在?                      │
│                                                          │
│  🕊️ 自由                                                 │
│    • 人的行为是完全自由的,还是被因果决定的?              │
│    • 如果能预知未来,自由意志还存在吗?                    │
│    • 自由是选择的能力,还是选择的结果?                    │
│                                                          │
│  ⚖️ 道德                                                 │
│    • 道德是客观存在的,还是人类创造的?                    │
│    • 如果没有上帝,一切都是允许的吗?                      │
│    • 善良的行为是否需要善良的动机?                       │
│                                                          │
│  🧠 意识                                                 │
│    • 意识是物质的产物,还是独立的存在?                    │
│    • 人工智能可以拥有意识吗?                             │
│    • "我"是什么?意识的本质是什么?                        │
│                                                          │
│  ⏳ 时间                                                 │
│    • 时间是真实存在的,还是人类的幻觉?                    │
│    • 过去和未来是否存在?                                 │
│    • 如果时间旅行可能,会产生什么悖论?                    │
│                                                          │
│  💫 意义                                                 │
│    • 人生的意义是什么?                                   │
│    • 意义是被发现的,还是被创造的?                        │
│    • 如果宇宙终将毁灭,一切还有意义吗?                    │
└─────────────────────────────────────────────────────────┘

1.5 技术栈

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

二、项目结构

lib/
├── main_daily_question.dart      # 应用主入口
│   ├── DailyQuestionApp          # 根应用组件
│   ├── QuestionCategory          # 问题分类枚举
│   ├── PhilosophyQuestion        # 哲学问题模型
│   ├── UserThought               # 用户思考模型
│   ├── DailyQuestionHomePage     # 主页面
│   ├── TodayQuestionPage         # 今日问题页
│   ├── HistoryPage               # 历史回顾页
│   ├── StatsPage                 # 统计页面
│   └── QuestionCard              # 问题卡片组件

三、数据模型

3.1 QuestionCategory 枚举

enum QuestionCategory {
  existence('存在', '🌌', Color(0xFF673AB7)),
  freedom('自由', '🕊️', Color(0xFF2196F3)),
  morality('道德', '⚖️', Color(0xFF4CAF50)),
  consciousness('意识', '🧠', Color(0xFFFF9800)),
  time('时间', '⏳', Color(0xFF00BCD4)),
  meaning('意义', '💫', Color(0xFFE91E63));

  final String label;
  final String emoji;
  final Color color;
}

3.2 PhilosophyQuestion 模型

class PhilosophyQuestion {
  final String id;                    // 问题唯一标识
  final String content;               // 问题内容
  final QuestionCategory category;    // 问题分类
  final DateTime date;                // 问题日期
  final String? philosopher;          // 相关哲学家
  final String? background;           // 问题背景
  final List<String> hints;           // 思考提示
  bool isFavorite;                    // 是否收藏
}

3.3 UserThought 模型

class UserThought {
  final String id;                    // 思考唯一标识
  final String questionId;            // 关联问题ID
  final String content;               // 思考内容
  final DateTime createdAt;           // 创建时间
  final DateTime? updatedAt;          // 更新时间
  final int wordCount;                // 字数统计
  final List<String> tags;            // 自定义标签
}

四、核心功能实现

4.1 每日问题生成算法

应用启动

获取当前日期

计算日期哈希值

映射到问题索引

从问题库获取问题

检查是否有用户思考

展示今日问题

用户点击思考

显示输入界面

等待用户操作

记录思考内容

保存到本地

更新统计数据

4.2 问题生成算法实现

PhilosophyQuestion getDailyQuestion() {
  final today = DateTime.now();
  final dayOfYear = today.difference(DateTime(today.year, 1, 1)).inDays;
  
  final questionIndex = dayOfYear % _questionBank.length;
  final question = _questionBank[questionIndex];
  
  final savedThought = _getThoughtForQuestion(question.id);
  if (savedThought != null) {
    question.userThought = savedThought;
  }
  
  return question;
}

4.3 思考记录流程

数据层 输入弹窗 问题页面 用户 数据层 输入弹窗 问题页面 用户 点击思考按钮 显示输入界面 展示输入框和提示 输入思考内容 点击保存 创建UserThought 保存到本地存储 返回保存结果 显示成功提示

4.4 思考记录实现

void saveThought(String questionId, String content) {
  final thought = UserThought(
    id: DateTime.now().millisecondsSinceEpoch.toString(),
    questionId: questionId,
    content: content,
    createdAt: DateTime.now(),
    wordCount: content.replaceAll(RegExp(r'\s'), '').length,
  );
  
  setState(() {
    _thoughts.add(thought);
    _currentQuestion?.userThought = thought;
  });
  
  _saveToLocalStorage(thought);
  
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(
      content: const Text('思考已记录 ✨'),
      backgroundColor: _currentQuestion?.category.color,
    ),
  );
}

4.5 收藏功能实现

void toggleFavorite(PhilosophyQuestion question) {
  setState(() {
    question.isFavorite = !question.isFavorite;
  });
  
  if (question.isFavorite) {
    _favorites.add(question.id);
  } else {
    _favorites.remove(question.id);
  }
  
  _saveFavorites();
  
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(
      content: Text(
        question.isFavorite ? '已收藏到思想宝库 💎' : '已取消收藏',
      ),
      duration: const Duration(seconds: 1),
    ),
  );
}

五、界面设计

5.1 主页面布局

┌─────────────────────────────────────┐
│  💭 每日一问                    📊  │
│     每天一个哲学问题,引发思考        │
├─────────────────────────────────────┤
│  [  今日问题  ]  [  历史回顾  ]      │
├─────────────────────────────────────┤
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 🌌 存在                     │    │
│  │                             │    │
│  │ 如果一棵树在森林中倒下,     │    │
│  │ 没有人听见,它发出声音了吗?  │    │
│  │                             │    │
│  │ ─────────────────────────   │    │
│  │ 💭 思考提示:                │    │
│  │ • 声音的存在是否依赖观察者? │    │
│  │ • 客观存在与主观感知的关系? │    │
│  │                             │    │
│  │ 📅 2024年1月15日            │    │
│  │ 🏛️ 贝克莱                  │    │
│  │                             │    │
│  │ [💭 我的思考]  [⭐ 收藏]    │    │
│  └─────────────────────────────┘    │
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 📊 思考统计                 │    │
│  │ ─────────────────────────   │    │
│  │ 连续思考: 7天               │    │
│  │ 累计字数: 2,456字           │    │
│  │ 收藏问题: 12个              │    │
│  └─────────────────────────────┘    │
│                                     │
└─────────────────────────────────────┘

5.2 思考输入界面

┌─────────────────────────────────────┐
│              ────                   │
│                                     │
│  💭 记录你的思考                    │
│                                     │
│  问题:                              │
│  如果一棵树在森林中倒下...          │
│                                     │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  │ 写下你的思考...             │   │
│  │                             │   │
│  │ 这个问题让我想到了...       │   │
│  │                             │   │
│  │                             │   │
│  │                             │   │
│  │                             │   │
│  │                             │   │
│  └─────────────────────────────┘   │
│                                     │
│  字数: 0/500                        │
│                                     │
│  💡 提示: 没有标准答案,真实记录     │
│     你的思考过程即可                │
│                                     │
│  ┌─────────────────────────────┐   │
│  │         保存思考             │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘

5.3 历史回顾页面

┌─────────────────────────────────────┐
│  ← 历史回顾                         │
├─────────────────────────────────────┤
│  [全部] [存在] [自由] [道德] ...    │
├─────────────────────────────────────┤
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 🌌 存在           ⭐ 已收藏  │    │
│  │                             │    │
│  │ 如果一棵树在森林中倒下...   │    │
│  │                             │    │
│  │ 💭 我的思考:                │    │
│  │ 我认为声音的存在确实需要... │    │
│  │                             │    │
│  │ 📅 1月15日  📝 156字        │    │
│  └─────────────────────────────┘    │
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 🕊️ 自由                     │    │
│  │                             │    │
│  │ 人的行为是完全自由的...     │    │
│  │                             │    │
│  │ 💭 我的思考:                │    │
│  │ 自由意志是一个复杂的概念... │    │
│  │                             │    │
│  │ 📅 1月14日  📝 234字        │    │
│  └─────────────────────────────┘    │
│                                     │
└─────────────────────────────────────┘

5.4 统计页面

┌─────────────────────────────────────┐
│  📊 思考统计                         │
├─────────────────────────────────────┤
│                                     │
│  ┌─────────────────────────────┐    │
│  │    连续思考天数              │    │
│  │         🔥 7                 │    │
│  │         天                   │    │
│  └─────────────────────────────┘    │
│                                     │
│  ┌───────────┐ ┌───────────┐       │
│  │ 累计字数  │ │ 收藏问题  │       │
│  │  2,456   │ │    12    │       │
│  │   字     │ │   个     │       │
│  └───────────┘ └───────────┘       │
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 问题分类统计                 │    │
│  │ ─────────────────────────   │    │
│  │ 🌌 存在    ████████ 8       │    │
│  │ 🕊️ 自由    ██████ 6         │    │
│  │ ⚖️ 道德    █████ 5          │    │
│  │ 🧠 意识    ████ 4           │    │
│  │ ⏳ 时间    ███ 3            │    │
│  │ 💫 意义    ██ 2             │    │
│  └─────────────────────────────┘    │
│                                     │
│  ┌─────────────────────────────┐    │
│  │ 本月思考字数趋势             │    │
│  │                             │    │
│  │     ╭─╮                     │    │
│  │    ╭╯ ╰╮   ╭╮              │    │
│  │   ╭╯   ╰──╯╰──╮            │    │
│  │  ╭╯            ╰─          │    │
│  │  1日  7日  14日  21日 28日  │    │
│  └─────────────────────────────┘    │
│                                     │
└─────────────────────────────────────┘

六、动画效果

6.1 问题卡片渐入动画

AnimationController _fadeController;


void initState() {
  super.initState();
  _fadeController = AnimationController(
    vsync: this,
    duration: const Duration(milliseconds: 800),
  );
  
  _fadeController.forward();
}

Widget buildQuestionCard() {
  return FadeTransition(
    opacity: _fadeController,
    child: SlideTransition(
      position: Tween<Offset>(
        begin: const Offset(0, 0.3),
        end: Offset.zero,
      ).animate(CurvedAnimation(
        parent: _fadeController,
        curve: Curves.easeOut,
      )),
      child: QuestionCard(question: _currentQuestion),
    ),
  );
}

6.2 分类切换动画

AnimatedContainer(
  duration: const Duration(milliseconds: 300),
  decoration: BoxDecoration(
    color: isSelected ? category.color.withValues(alpha: 0.15) : Colors.transparent,
    borderRadius: BorderRadius.circular(20),
    border: Border.all(
      color: isSelected ? category.color : Colors.grey.shade300,
      width: isSelected ? 2 : 1,
    ),
  ),
  child: Padding(
    padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
    child: Row(
      children: [
        Text(category.emoji, style: const TextStyle(fontSize: 16)),
        const SizedBox(width: 8),
        Text(
          category.label,
          style: TextStyle(
            color: isSelected ? category.color : Colors.grey.shade700,
            fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal,
          ),
        ),
      ],
    ),
  ),
)

6.3 思考按钮脉冲动画

_pulseController = AnimationController(
  vsync: this,
  duration: const Duration(milliseconds: 1500),
)..repeat(reverse: true);

ScaleTransition(
  scale: Tween<double>(begin: 1.0, end: 1.05).animate(
    CurvedAnimation(parent: _pulseController, curve: Curves.easeInOut),
  ),
  child: ElevatedButton.icon(
    onPressed: _showThoughtDialog,
    icon: const Icon(Icons.edit_note),
    label: const Text('我的思考'),
    style: ElevatedButton.styleFrom(
      backgroundColor: question.category.color,
      foregroundColor: Colors.white,
    ),
  ),
)

七、问题库设计

7.1 存在类问题

序号 问题内容 相关哲学家 背景说明
1 如果一棵树在森林中倒下,没有人听见,它发出声音了吗? 贝克莱 主观唯心主义
2 我们如何证明自己不是在梦境中? 笛卡尔 怀疑论
3 存在先于本质,还是本质先于存在? 萨特 存在主义
4 "我"是什么?意识的本质是什么? 休谟 自我同一性
5 如果一切都是物质的,精神还存在吗? 德里达 唯物主义vs唯心主义

7.2 自由类问题

序号 问题内容 相关哲学家 背景说明
1 人的行为是完全自由的,还是被因果决定的? 斯宾诺莎 决定论
2 如果能预知未来,自由意志还存在吗? 奥古斯丁 自由意志
3 自由是选择的能力,还是选择的结果? 萨特 存在主义自由
4 社会规范是否限制了真正的自由? 卢梭 社会契约
5 自由意味着什么都可以做吗? 康德 道德律令

7.3 道德类问题

序号 问题内容 相关哲学家 背景说明
1 道德是客观存在的,还是人类创造的? 康德 道德实在论
2 如果没有上帝,一切都是允许的吗? 陀思妥耶夫斯基 道德基础
3 善良的行为是否需要善良的动机? 康德 义务论
4 结果正义还是程序正义更重要? 穆勒 功利主义
5 道德判断是理性的还是情感的? 休谟 情感主义

7.4 意识类问题

序号 问题内容 相关哲学家 背景说明
1 意识是物质的产物,还是独立的存在? 笛卡尔 心身问题
2 人工智能可以拥有意识吗? 塞尔 中文房间
3 他人的意识如何证明存在? 维特根斯坦 他心问题
4 意识是连续的还是离散的? 詹姆斯 意识流
5 自我意识从何而来? 黑格尔 自我意识

7.5 时间类问题

序号 问题内容 相关哲学家 背景说明
1 时间是真实存在的,还是人类的幻觉? 康德 先验时间
2 过去和未来是否存在? 奥古斯丁 时间本质
3 如果时间旅行可能,会产生什么悖论? 罗素 时间悖论
4 时间是线性的还是循环的? 尼采 永恒轮回
5 "现在"有多长? 胡塞尔 时间意识

7.6 意义类问题

序号 问题内容 相关哲学家 背景说明
1 人生的意义是什么? 加缪 荒诞主义
2 意义是被发现的,还是被创造的? 萨特 存在主义
3 如果宇宙终将毁灭,一切还有意义吗? 尼采 虚无主义
4 幸福是人生的目的吗? 亚里士多德 幸福论
5 工作的意义是什么? 马克思 劳动异化

八、数据统计功能

8.1 统计指标

统计项 计算方式 展示形式
连续思考天数 连续有思考记录的天数 数字+火焰图标
累计字数 所有思考内容的总字数 数字统计
收藏问题数 收藏的问题总数 数字统计
分类分布 各分类问题思考数量 柱状图
月度趋势 每月思考字数变化 折线图
平均字数 思考内容的平均字数 数字统计

8.2 统计数据结构

class ThoughtStats {
  final int consecutiveDays;      // 连续天数
  final int totalWords;           // 总字数
  final int favoriteCount;        // 收藏数
  final int totalThoughts;        // 思考总数
  final Map<QuestionCategory, int> categoryCount;  // 分类统计
  final List<DailyStats> monthlyTrend;  // 月度趋势
}

class DailyStats {
  final DateTime date;
  final int wordCount;
  final int thoughtCount;
}

8.3 统计计算实现

ThoughtStats calculateStats() {
  int consecutiveDays = 0;
  DateTime? lastDate;
  
  final sortedThoughts = _thoughts.toList()
    ..sort((a, b) => b.createdAt.compareTo(a.createdAt));
  
  for (final thought in sortedThoughts) {
    final thoughtDate = DateTime(
      thought.createdAt.year,
      thought.createdAt.month,
      thought.createdAt.day,
    );
    
    if (lastDate == null) {
      consecutiveDays = 1;
      lastDate = thoughtDate;
    } else {
      final diff = lastDate.difference(thoughtDate).inDays;
      if (diff == 1) {
        consecutiveDays++;
        lastDate = thoughtDate;
      } else {
        break;
      }
    }
  }
  
  return ThoughtStats(
    consecutiveDays: consecutiveDays,
    totalWords: _thoughts.fold(0, (sum, t) => sum + t.wordCount),
    favoriteCount: _favorites.length,
    totalThoughts: _thoughts.length,
    categoryCount: _calculateCategoryCount(),
    monthlyTrend: _calculateMonthlyTrend(),
  );
}

九、运行与调试

9.1 运行命令

# 运行到鸿蒙设备
flutter run -d harmony lib/main_daily_question.dart

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

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

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

9.2 功能测试清单

测试项 测试内容 预期结果
问题展示 每日问题显示 正确展示当天问题
思考记录 输入并保存思考 成功保存到本地
历史查看 查看过往问题 列表正确展示
分类筛选 按分类查看问题 正确筛选展示
收藏功能 收藏/取消收藏 状态正确更新
统计展示 查看统计数据 数据准确无误
日期切换 跨日使用应用 自动切换问题

十、扩展方向

10.1 社交功能

┌─────────────┐     分享思考     ┌─────────────┐
│   用户A     │ ───────────────→ │   用户B     │
└─────────────┘                  └─────────────┘
       │                                │
       │  查看他人思考                  │
       │  点赞与评论                    │
       │  关注与粉丝                    │
       ↓                                ↓
┌─────────────┐                  ┌─────────────┐
│  思想社区   │                  │  思想碰撞   │
└─────────────┘                  └─────────────┘

10.2 功能扩展计划

版本 功能 描述
v1.1 问题推荐 根据用户兴趣推荐问题
v1.2 思想导图 可视化思考路径
v1.3 哲学家介绍 相关哲学家生平
v1.4 思考提醒 每日定时提醒
v1.5 云端同步 多设备数据同步

10.3 数据可视化

思考数据

词云分析

情感分析

主题聚类

高频词汇

情绪趋势

思考方向

个人思想画像


十一、哲学思考引导

11.1 思考方法

💭 哲学思考的五个层次 💭

层次 名称 描述 示例问题
第一层 描述 现象是什么? 这个问题在问什么?
第二层 分析 原因是什么? 为什么会有这个问题?
第三层 评价 价值是什么? 这个问题重要吗?
第四层 综合 关联是什么? 这与其他问题有何联系?
第五层 创造 新见是什么? 我有什么新的理解?

11.2 思考提示模板

┌─────────────────────────────────────────────────────────┐
│                   思考提示模板                          │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  📌 问题重述                                             │
│     用自己的话重新描述这个问题...                        │
│                                                          │
│  🔍 核心概念                                             │
│     这个问题涉及哪些核心概念?                            │
│                                                          │
│  💭 我的观点                                             │
│     我对这个问题的初步看法是...                          │
│                                                          │
│  🤔 反面思考                                             │
│     如果持相反观点,理由是什么?                           │
│                                                          │
│  🔗 关联思考                                             │
│     这让我想到了...                                      │
│                                                          │
│  💡 新的疑问                                             │
│     这引发了什么新的问题?                                │
│                                                          │
└─────────────────────────────────────────────────────────┘

十二、总结

每日一问应用通过"每天一个哲学问题,没有标准答案"的核心理念,为用户提供了一个深度思考的平台。应用涵盖存在、自由、道德、意识、时间、意义六大哲学主题,每个主题都配有精心设计的问题库,引导用户进行多维度的哲学思考。

应用采用简洁优雅的界面设计,以紫色为主色调,营造深邃的思考氛围。今日问题页面通过渐入动画展示每日问题,配合思考提示引导用户深入思考。思考记录功能支持用户记录个人感悟,历史回顾功能让用户能够追溯思想轨迹,统计功能则帮助用户了解自己的思考习惯。

问题库设计参考了东西方哲学经典,每个问题都标注了相关哲学家和背景说明,帮助用户理解问题的哲学内涵。思考引导模板提供了系统化的思考方法,从描述、分析、评价、综合到创造五个层次,帮助用户建立完整的哲学思维框架。

应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。后续版本计划增加社交功能、思想导图、哲学家介绍等功能,为用户提供更丰富的哲学思考体验。

每天一个问题,开启思想之旅 ✨


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐