历史知识问答应用


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

一、项目概述

运行效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 应用简介

历史知识问答应用是一款寓教于乐的历史学习工具,旨在通过趣味问答的形式帮助用户学习和巩固历史知识。历史是人类文明的记忆,了解历史有助于我们认识世界、理解当下、展望未来。本应用涵盖中国历史、世界历史、古代史、近代史等多个领域,通过不同难度级别的题目,让用户在答题中学习,在学习中成长。

应用采用游戏化设计理念,通过积分系统、成就徽章等功能激励用户持续学习。每道题目都配有详细的解析说明,帮助用户理解历史事件的背景和意义,真正做到知其然更知其所以然。

1.2 核心功能

功能模块 功能描述 实现方式
知识问答 多类别历史题目问答 数据模型 + 选择题
分类筛选 按类别和难度筛选 FilterChip + 状态管理
快速挑战 随机10道题目 随机打乱 + 计时
答题解析 详细答案解释 底部展示区
积分系统 根据难度计分 难度系数计算
成就徽章 学习里程碑奖励 条件判断解锁
历史记录 答题记录保存 List集合存储

1.3 历史分类

分类 英文标识 图标 颜色 内容范围
古代史 ancient account_balance 琥珀色 人类文明起源到罗马帝国灭亡
中世纪史 medieval castle 棕色 封建时代的历史变迁
近代史 modern factory 靛蓝色 工业革命到二战时期
现代史 contemporary public 蓝色 二战后的世界格局
中国历史 chinese temple_buddhist 红色 中华五千年文明史
世界历史 world language 蓝绿色 全球视角的历史事件
军事历史 military military_tech 橙色 著名战役与军事战略
文化历史 culture palette 紫色 艺术、哲学与文化遗产

1.4 难度等级

等级 英文标识 颜色 分值 题目特点
简单 easy 绿色 10分 基础历史常识
中等 medium 橙色 20分 需要一定历史知识
困难 hard 红色 30分 深度历史知识
专家 expert 紫色 50分 专业级历史问题

1.5 技术栈

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

1.6 项目结构

lib/
└── main_history_quiz.dart
    ├── HistoryQuizApp           # 应用入口
    ├── HistoryCategory          # 历史分类枚举
    ├── DifficultyLevel          # 难度等级枚举
    ├── HistoryQuestion          # 题目数据模型
    ├── QuizResult               # 答题结果模型
    ├── HomePage                 # 主页面
    │   ├── _buildHomePage()     # 首页
    │   ├── _buildQuizPage()     # 答题设置页
    │   ├── _buildHistoryPage()  # 历史记录页
    │   └── _buildProfilePage()  # 个人中心
    └── QuizPage                 # 答题页面

二、系统架构

2.1 整体架构图

Business Logic

Presentation Layer

Data Layer

HistoryQuestion
题目模型

HistoryCategory
分类枚举

DifficultyLevel
难度枚举

QuizResult
结果模型

首页
学习概览

答题设置页

历史记录页

个人中心

答题页面

题目筛选
_getFilteredQuestions

答题判断
_selectAnswer

积分计算
_score

结果统计
_calculateStats

2.2 类图设计

manages

navigates

records

displays

has

has

contains

HistoryQuizApp

+Widget build()

HomePage

-int _currentIndex

-List<HistoryQuestion> _allQuestions

-List<QuizResult> _quizResults

-int _totalScore

-int _totalCorrect

-int _totalQuestions

-HistoryCategory? _selectedCategory

-DifficultyLevel? _selectedDifficulty

+Widget build()

-void _startQuiz()

-void _showQuickQuiz()

-List<HistoryQuestion> _getFilteredQuestions()

QuizPage

-int _currentIndex

-int? _selectedIndex

-bool _answered

-int _score

-int _correctCount

-DateTime _startTime

+Widget build()

-void _selectAnswer()

-void _nextQuestion()

-void _showResult()

HistoryQuestion

+String id

+String question

+List<String> options

+int correctIndex

+String explanation

+HistoryCategory category

+DifficultyLevel difficulty

+String era

QuizResult

+String id

+String categoryName

+int totalQuestions

+int correctAnswers

+int score

+DateTime date

+Duration duration

+double accuracy

«enumeration»

HistoryCategory

ancient

medieval

modern

contemporary

chinese

world

military

culture

+String categoryName

+IconData categoryIcon

+Color categoryColor

«enumeration»

DifficultyLevel

easy

medium

hard

expert

+String levelName

+Color levelColor

+int levelScore

2.3 数据流程图

快速挑战

分类答题

查看记录

查看统计

正确

错误

用户操作

操作类型

随机10题

筛选题目

加载历史

计算数据

进入答题页

显示题目

选择答案

判断正误

加分

显示解析

下一题

完成答题

保存结果

2.4 答题流程图

用户点击选项

检查答案

答案正确

答案错误

计算得分

展示解释

点击继续

还有题目

无更多题目

返回首页

显示题目

选择答案

判断正误

正确

错误

加分

显示解析

下一题

显示结果


三、核心模块设计

3.1 数据模型设计

3.1.1 题目模型 (HistoryQuestion)
class HistoryQuestion {
  final String id;                    // 唯一标识
  final String question;              // 题目内容
  final List<String> options;         // 选项列表(4个)
  final int correctIndex;             // 正确答案索引
  final String explanation;           // 答案解析
  final HistoryCategory category;     // 历史分类
  final DifficultyLevel difficulty;   // 难度等级
  final String era;                   // 所属时代
  final String? imageUrl;             // 图片地址(可选)
}
3.1.2 答题结果模型 (QuizResult)
class QuizResult {
  final String id;                    // 唯一标识
  final String categoryName;          // 分类名称
  final int totalQuestions;           // 总题数
  final int correctAnswers;           // 正确数
  final int score;                    // 得分
  final DateTime date;                // 答题日期
  final Duration duration;            // 用时

  double get accuracy => totalQuestions > 0 
      ? correctAnswers / totalQuestions : 0;
}
3.1.3 历史分类枚举 (HistoryCategory)
25% 20% 15% 15% 10% 5% 5% 5% 题目分类分布 中国历史 世界历史 古代史 中世纪史 近代史 现代史 军事历史 文化历史
分类 英文标识 图标 颜色 代表题目
古代史 ancient account_balance 琥珀色 古埃及金字塔用途
中世纪史 medieval castle 棕色 十字军东征目的
近代史 modern factory 靛蓝色 法国大革命时间
现代史 contemporary public 蓝色 苏联解体时间
中国历史 chinese temple_buddhist 红色 秦统一六国时间
世界历史 world language 蓝绿色 美国独立宣言
军事历史 military military_tech 橙色 诺曼底登陆
文化历史 culture palette 紫色 蒙娜丽莎作者

3.2 页面结构设计

3.2.1 首页模块

首页 _buildHomePage

学习概览卡片

快速开始入口

历史分类网格

总积分

正确率

答题数

快速挑战

分类答题

8个分类卡片

3.2.2 答题设置页面

答题设置页

分类选择

难度选择

题目数量显示

开始答题按钮

难度说明

全部/古代史/中世纪史/...

全部/简单/中等/困难/专家

3.2.3 答题页面

用户点击

判断正误

展示解释

点击继续

还有题目

答题完成

返回首页

加载题目

显示题目

选择选项

显示结果

显示解析

下一题

完成弹窗

3.3 状态管理

3.3.1 核心状态变量
class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
  // 导航状态
  int _currentIndex = 0;
  
  // 数据状态
  final List<HistoryQuestion> _allQuestions = [];
  final List<QuizResult> _quizResults = [];
  
  // 统计状态
  int _totalScore = 0;
  int _totalCorrect = 0;
  int _totalQuestions = 0;
  
  // 筛选状态
  HistoryCategory? _selectedCategory;
  DifficultyLevel? _selectedDifficulty;
}
3.3.2 题目筛选逻辑
List<HistoryQuestion> _getFilteredQuestions() {
  var questions = _allQuestions;

  // 分类筛选
  if (_selectedCategory != null) {
    questions = questions.where((q) => q.category == _selectedCategory).toList();
  }

  // 难度筛选
  if (_selectedDifficulty != null) {
    questions = questions.where((q) => q.difficulty == _selectedDifficulty).toList();
  }

  return questions;
}

四、UI设计规范

4.1 配色方案

应用采用深棕色主题设计,营造古典历史氛围:

颜色类型 色值 用途
主色 #795548 (Brown) AppBar、按钮、强调元素
背景色 #1A1410 页面背景
卡片背景 #2D2319 卡片、弹窗
文字主色 #FFFFFF 主要文字
文字次色 #B0BEC5 次要文字

分类专属颜色:

// 古代史 - 琥珀色
Colors.amber

// 中世纪史 - 棕色
Colors.brown

// 近代史 - 靛蓝色
Colors.indigo

// 现代史 - 蓝色
Colors.blue

// 中国历史 - 红色
Colors.red

// 世界历史 - 蓝绿色
Colors.teal

// 军事历史 - 橙色
Colors.orange

// 文化历史 - 紫色
Colors.purple

4.2 字体规范

元素 字号 字重 颜色
题目内容 18px Medium #FFFFFF
选项文字 15px Regular #FFFFFF
分类标签 12px Regular 分类色
解析文字 13px Regular #B0BEC5
统计数字 24px Bold #FFFFFF

4.3 组件规范

4.3.1 题目卡片
┌─────────────────────────────────────────────────┐
│              [古代史] [简单]                     │
│                                                 │
│          古埃及金字塔的主要用途是什么?          │
│                                                 │
└─────────────────────────────────────────────────┘
4.3.2 选项按钮
默认状态:
┌─────────────────────────────────────────────────┐
│  A  祭祀神庙                                    │
└─────────────────────────────────────────────────┘

正确答案:
┌─────────────────────────────────────────────────┐
│  ✓  B  国王陵墓                           绿色  │
└─────────────────────────────────────────────────┘

错误答案:
┌─────────────────────────────────────────────────┐
│  ✗  A  祭祀神庙                           红色  │
└─────────────────────────────────────────────────┘
4.3.3 结果弹窗
┌─────────────────────────────────────────────────┐
│                      🏆                         │
│                                                 │
│                 答题完成                        │
│                                                 │
│     正确率          得分           用时         │
│      80%           150           5:30          │
│                                                 │
│              [返回]                             │
└─────────────────────────────────────────────────┘

五、核心功能实现

5.1 题目加载

void _loadQuestions() {
  _allQuestions.addAll([
    const HistoryQuestion(
      id: 'c1',
      question: '秦始皇统一六国是在哪一年?',
      options: ['公元前230年', '公元前221年', '公元前210年', '公元前206年'],
      correctIndex: 1,
      explanation: '公元前221年,秦王嬴政灭齐国,完成统一六国大业...',
      category: HistoryCategory.chinese,
      difficulty: DifficultyLevel.easy,
      era: '秦朝',
    ),
    // ... 更多题目
  ]);
}

5.2 答题判断

void _selectAnswer(int index) {
  if (_answered) return;

  setState(() {
    _selectedIndex = index;
    _answered = true;

    if (index == _currentQuestion.correctIndex) {
      _correctCount++;
      _score += _currentQuestion.difficulty.levelScore;
    }
  });
}

5.3 积分计算

extension DifficultyLevelExtension on DifficultyLevel {
  int get levelScore {
    switch (this) {
      case DifficultyLevel.easy:
        return 10;
      case DifficultyLevel.medium:
        return 20;
      case DifficultyLevel.hard:
        return 30;
      case DifficultyLevel.expert:
        return 50;
    }
  }
}

5.4 结果保存

void _showResult() {
  final duration = DateTime.now().difference(_startTime);
  final result = QuizResult(
    id: DateTime.now().millisecondsSinceEpoch.toString(),
    categoryName: widget.categoryName,
    totalQuestions: widget.questions.length,
    correctAnswers: _correctCount,
    score: _score,
    date: DateTime.now(),
    duration: duration,
  );

  widget.onComplete(result);
}

5.5 统计计算

void _calculateStats() {
  _totalScore = _quizResults.fold(0, (sum, r) => sum + r.score);
  _totalCorrect = _quizResults.fold(0, (sum, r) => sum + r.correctAnswers);
  _totalQuestions = _quizResults.fold(0, (sum, r) => sum + r.totalQuestions);
}

六、预置题目数据

6.1 中国历史题目

序号 题目 难度 时代
1 秦始皇统一六国时间 简单 秦朝
2 唐朝开国皇帝 简单 唐朝
3 郑和下西洋最远到达 中等 明朝
4 戊戌变法时间 中等 清朝
5 《史记》作者 简单 西汉
6 赤壁之战时代 中等 东汉末年

6.2 世界历史题目

序号 题目 难度 时代
1 古埃及金字塔用途 简单 古埃及
2 法国大革命时间 简单 近代欧洲
3 一战导火索 中等 20世纪初
4 文艺复兴起源地 简单 中世纪晚期
5 苏联解体时间 中等 20世纪末
6 美国独立宣言时间 简单 18世纪

6.3 军事历史题目

序号 题目 难度 时代
1 诺曼底登陆时间 简单 二战
2 滑铁卢战役被击败者 中等 19世纪

七、历史知识体系

7.1 中国历史时间线

先秦 约前2070年 夏朝建立 约前1600年 商朝建立 约前1046年 周朝建立 前221年 秦统一六国 帝制时代 206年 汉朝建立 220年 三国鼎立 581年 隋朝统一 618年 唐朝建立 960年 宋朝建立 1271年 元朝建立 1368年 明朝建立 1644年 清朝入关 近现代 1840年 鸦片战争 1911年 辛亥革命 1949年 新中国成立 中国历史大事年表

7.2 世界历史时间线

古代 约前3100年 古埃及统一 前776年 首届奥运会 前509年 罗马共和国建立 476年 西罗马帝国灭亡 中世纪 800年 查理曼加冕 1096年 第一次十字军东征 1347年 黑死病爆发 近代 1492年 哥伦布发现美洲 1789年 法国大革命 1861年 美国南北战争 1914年 第一次世界大战 现代 1945年 二战结束 1991年 苏联解体 世界历史大事年表

7.3 难度分级说明

题目难度

简单

中等

困难

专家

基础常识

教材重点

扩展知识

细节记忆

深度理解

关联分析

专业研究

冷门知识


八、扩展功能规划

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 题目系统 分类筛选 积分系统 错题本 每日挑战 排行榜 知识卡片 学习路径 社区分享 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 历史知识问答开发计划

8.2 功能扩展建议

8.2.1 错题本

记录答错的题目:

  • 自动收集错题
  • 针对性复习
  • 错题重做功能
8.2.2 每日挑战

每日定时推送:

  • 每日10题挑战
  • 连续打卡奖励
  • 挑战排行榜
8.2.3 知识卡片

历史知识卡片:

  • 重要事件卡片
  • 人物传记卡片
  • 时间轴卡片

九、注意事项

9.1 开发注意事项

  1. 题目数据:确保题目准确性,解析详尽

  2. 难度平衡:各难度题目数量合理分布

  3. 随机打乱:每次答题选项顺序随机

  4. 积分公平:难度系数合理设置

9.2 常见问题

问题 原因 解决方案
题目重复 未随机打乱 使用shuffle()
积分不准 难度系数错误 检查levelScore
筛选无效 条件逻辑错误 检查筛选条件

9.3 学习建议

📚 历史学习小贴士 📚

以史为鉴,可以知兴替。
历史学习重在理解,而非死记硬背。
将历史事件放在时代背景下理解。
多角度看待历史,培养批判性思维。


十、运行说明

10.1 环境要求

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

10.2 运行命令

# 查看可用设备
flutter devices

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

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

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

十一、总结

历史知识问答应用通过丰富的题目库、科学的难度分级和游戏化的学习方式,为用户提供了一个趣味横生的历史学习平台。应用采用深棕色主题设计,营造古典历史氛围;题目涵盖古今中外,从中国历史到世界历史,从古代文明到现代格局;积分系统和成就徽章激励用户持续学习。

核心功能涵盖八大历史分类,四档难度等级,满足不同用户的学习需求。每道题目都配有详细的解析说明,帮助用户理解历史事件的背景和意义。快速挑战模式支持随机10题,适合碎片时间学习;分类答题模式支持按类别和难度筛选,适合针对性提升。

通过本应用,希望能够帮助更多人了解历史、热爱历史,在答题中学习,在学习中成长,真正做到以史为鉴,面向未来。

以史为鉴,可以知兴替

Logo

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

更多推荐