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

一、项目概述

运行效果图

image-20260410231606163

image-20260410231613297

image-20260410231616861

image-20260410231620734

1.1 应用简介

考试资料共享平台是一款专为高校学生设计的学习资料共享应用,提供资料上传、下载、分类浏览、搜索、收藏等功能。应用以优雅的深紫色为主色调,营造专业、学术的学习氛围。

应用涵盖首页、分类、收藏、个人中心四大模块。学生可以浏览热门资料和最新资料,按科目、类型、年级筛选资料,收藏感兴趣的资料,上传自己的学习资料分享给其他同学。

1.2 核心功能

功能模块 功能描述 实现方式
资料浏览 浏览学习资料列表 列表展示
资料搜索 搜索资料标题和描述 搜索过滤
资料下载 下载学习资料 下载计数
资料收藏 收藏感兴趣的资料 状态管理
资料分类 按科目、类型、年级筛选 筛选逻辑
资料上传 上传学习资料 文件上传

1.3 科目分类定义

序号 科目名称 Emoji 描述
1 数学 📐 高等数学、线性代数等
2 英语 📖 大学英语、四六级等
3 物理 ⚛️ 大学物理、力学等
4 化学 🧪 有机化学、无机化学等
5 计算机 💻 编程、算法、数据结构等
6 经济学 📊 微观经济、宏观经济等
7 其他 📚 其他学科资料

1.4 资料类型定义

序号 类型名称 Emoji 描述
1 笔记 📝 课堂笔记、复习笔记
2 试卷 📋 历年真题、模拟试卷
3 总结 📌 知识点总结、考点归纳
4 视频 🎬 教学视频、讲解视频
5 其他 📁 其他类型资料

1.5 年级定义

序号 年级名称 Emoji 描述
1 大一 🌱 大学一年级
2 大二 🌿 大学二年级
3 大三 🌳 大学三年级
4 大四 🎓 大学四年级
5 研究生 🔬 研究生阶段

1.6 技术栈

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

1.7 项目结构

lib/
└── main_exam_materials.dart
    ├── ExamMaterialsApp          # 应用入口
    ├── Subject                   # 科目枚举
    ├── MaterialType              # 资料类型枚举
    ├── GradeLevel                # 年级枚举
    ├── Material                  # 资料模型
    ├── ExamMaterialsHomePage     # 主页面(底部导航)
    ├── _buildHomePage            # 首页
    ├── _buildCategoryPage        # 分类页
    ├── _buildFavoritesPage       # 收藏页
    ├── _buildProfilePage         # 个人中心页
    ├── _toggleFavorite           # 收藏/取消收藏
    ├── _downloadMaterial         # 下载资料
    └── _getFilteredMaterials     # 筛选资料

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
ExamMaterialsHomePage

首页

分类页

收藏页

个人中心

搜索栏

热门资料

最新资料

筛选条件

资料列表

收藏列表

用户统计

菜单列表

资料管理器
MaterialManager

搜索管理器
SearchManager

收藏管理器
FavoriteManager

Material
资料模型

Subject
科目

MaterialType
资料类型

2.2 类图设计

has

has

has

manages

ExamMaterialsApp

+Widget build()

«enumeration»

Subject

+String label

+String emoji

+String description

+mathematics()

+english()

+physics()

+chemistry()

+computer()

+economics()

+other()

«enumeration»

MaterialType

+String label

+String emoji

+String description

+notes()

+exam()

+summary()

+video()

+other()

«enumeration»

GradeLevel

+String label

+String emoji

+String description

+freshman()

+sophomore()

+junior()

+senior()

+graduate()

Material

+String id

+String title

+String author

+Subject subject

+MaterialType type

+GradeLevel grade

+String description

+int downloadCount

+int favoriteCount

+double rating

+DateTime uploadTime

+String fileSize

+String fileFormat

+bool isFavorite

+Material copyWith()

ExamMaterialsHomePage

-int _currentIndex

-List<Material> _allMaterials

-List<Material> _myFavorites

-Subject _selectedSubject

-MaterialType _selectedType

-GradeLevel _selectedGrade

+void _toggleFavorite()

+void _downloadMaterial()

+List<Material> _getFilteredMaterials()

2.3 页面导航流程

首页

分类

收藏

我的

应用启动

首页

底部导航

浏览资料

筛选资料

查看收藏

个人中心

搜索资料

查看详情

下载/收藏

选择筛选条件

查看结果

收藏列表

上传资料

查看统计

2.4 资料浏览流程

详情 搜索 首页 学生 详情 搜索 首页 学生 打开应用 显示热门和最新资料 输入关键词 过滤资料列表 点击资料 显示详情 显示资料信息 点击下载 开始下载

三、核心模块设计

3.1 数据模型设计

3.1.1 科目枚举 (Subject)
enum Subject {
  mathematics(label: '数学', emoji: '📐', description: '高等数学、线性代数等'),
  english(label: '英语', emoji: '📖', description: '大学英语、四六级等'),
  physics(label: '物理', emoji: '⚛️', description: '大学物理、力学等'),
  chemistry(label: '化学', emoji: '🧪', description: '有机化学、无机化学等'),
  computer(label: '计算机', emoji: '💻', description: '编程、算法、数据结构等'),
  economics(label: '经济学', emoji: '📊', description: '微观经济、宏观经济等'),
  other(label: '其他', emoji: '📚', description: '其他学科资料');

  final String label;
  final String emoji;
  final String description;

  const Subject({
    required this.label,
    required this.emoji,
    required this.description,
  });
}
3.1.2 资料类型枚举 (MaterialType)
enum MaterialType {
  notes(label: '笔记', emoji: '📝', description: '课堂笔记、复习笔记'),
  exam(label: '试卷', emoji: '📋', description: '历年真题、模拟试卷'),
  summary(label: '总结', emoji: '📌', description: '知识点总结、考点归纳'),
  video(label: '视频', emoji: '🎬', description: '教学视频、讲解视频'),
  other(label: '其他', emoji: '📁', description: '其他类型资料');

  final String label;
  final String emoji;
  final String description;

  const MaterialType({
    required this.label,
    required this.emoji,
    required this.description,
  });
}
3.1.3 年级枚举 (GradeLevel)
enum GradeLevel {
  freshman(label: '大一', emoji: '🌱', description: '大学一年级'),
  sophomore(label: '大二', emoji: '🌿', description: '大学二年级'),
  junior(label: '大三', emoji: '🌳', description: '大学三年级'),
  senior(label: '大四', emoji: '🎓', description: '大学四年级'),
  graduate(label: '研究生', emoji: '🔬', description: '研究生阶段');

  final String label;
  final String emoji;
  final String description;

  const GradeLevel({
    required this.label,
    required this.emoji,
    required this.description,
  });
}
3.1.4 资料模型 (Material)
class Material {
  final String id;              // 资料ID
  final String title;           // 资料标题
  final String author;          // 上传者
  final Subject subject;        // 科目
  final MaterialType type;      // 资料类型
  final GradeLevel grade;       // 年级
  final String description;     // 描述
  final int downloadCount;      // 下载次数
  final int favoriteCount;      // 收藏次数
  final double rating;          // 评分
  final int ratingCount;        // 评价人数
  final DateTime uploadTime;    // 上传时间
  final String fileSize;        // 文件大小
  final String fileFormat;      // 文件格式
  final bool isFavorite;        // 是否收藏

  Material({...});

  Material copyWith({...});
}
3.1.5 科目分布
25% 20% 20% 15% 10% 5% 5% 科目资料分布示例 数学 英语 计算机 物理 化学 经济学 其他
3.1.6 资料类型分布
35% 30% 20% 10% 5% 资料类型分布示例 笔记 试卷 总结 视频 其他

3.2 页面结构设计

3.2.1 主页面布局

ExamMaterialsHomePage

IndexedStack

首页

分类页

收藏页

个人中心

NavigationBar

首页 Tab

分类 Tab

收藏 Tab

我的 Tab

3.2.2 首页结构

首页

SliverAppBar

搜索栏

快速统计

热门资料

最新资料

横向卡片列表

纵向卡片列表

3.2.3 分类页结构

分类页

SliverAppBar

筛选条件

资料列表

科目筛选

类型筛选

年级筛选

资料卡片

空状态提示

3.2.4 收藏页结构

收藏页

SliverAppBar

有收藏?

收藏列表

资料卡片

空状态提示

3.3 资料筛选逻辑

获取所有资料

科目筛选?

按科目过滤

保持原列表

类型筛选?

按类型过滤

保持原列表

年级筛选?

按年级过滤

保持原列表

搜索关键词?

按关键词过滤

返回结果

3.4 收藏逻辑

点击收藏按钮

是否已收藏?

取消收藏

添加收藏

更新收藏状态

收藏数-1

从收藏列表移除

更新收藏状态

收藏数+1

添加到收藏列表

显示提示


四、UI设计规范

4.1 配色方案

应用以优雅的深紫色为主色调,营造专业、学术的学习氛围:

颜色类型 色值 用途
主色 #673AB7 (DeepPurple) 导航、主题元素
辅助色 #7E57C2 分类页面
第三色 #9575CD 收藏页面
强调色 #B39DDB 个人中心
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 资料卡片

4.2 功能模块颜色

模块 色值 视觉效果
资料总数 #673AB7 深紫色
总下载 #2196F3 蓝色
我的收藏 #F44336 红色

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
资料标题 16px Bold #000000
资料描述 14px Regular #666666
统计数字 20px Bold 白色
标签文字 12px Regular 模块颜色

4.4 组件规范

4.4.1 资料卡片
┌─────────────────────────────────────┐
│  ┌──────┐  高等数学期末复习笔记      │
│  │  📝  │  张同学                    │
│  └──────┘  📐 数学  🌿 大二          │
│            ⬇️ 1234  ⭐ 4.8  2.5 MB   │
└─────────────────────────────────────┘
4.4.2 快速统计
┌─────────────────────────────────────┐
│   📁 6        ⬇️ 9170     ❤️ 0      │
│   资料总数    总下载      我的收藏   │
└─────────────────────────────────────┘
4.4.3 筛选条件
┌─────────────────────────────────────┐
│  科目筛选                            │
│  [全部] [📐 数学] [📖 英语] [💻 计算机]│
│                                     │
│  类型筛选                            │
│  [全部] [📝 笔记] [📋 试卷] [📌 总结]│
│                                     │
│  年级筛选                            │
│  [全部] [🌱 大一] [🌿 大二] [🌳 大三]│
└─────────────────────────────────────┘
4.4.4 资料详情
┌─────────────────────────────────────┐
│  高等数学期末复习笔记            ✕   │
│                                     │
│  👤 上传者: 张同学                  │
│  📐 科目: 数学                      │
│  📁 类型: 笔记                      │
│  🌿 年级: 大二                      │
│  📄 格式: PDF                       │
│  📎 大小: 2.5 MB                    │
│  ⬇️ 下载次数: 1234                  │
│  ❤️ 收藏次数: 567                   │
│  ⭐ 评分: 4.8 (89人评价)            │
│                                     │
│  资料简介                            │
│  包含极限、导数、积分等重点知识点...│
│                                     │
│  [⬇️ 下载资料]              ❤️      │
└─────────────────────────────────────┘

五、核心功能实现

5.1 资料收藏实现

void _toggleFavorite(Material material) {
  setState(() {
    final updatedMaterial = material.copyWith(
      isFavorite: !material.isFavorite,
      favoriteCount: material.isFavorite 
          ? material.favoriteCount - 1 
          : material.favoriteCount + 1,
    );
    
    final index = _allMaterials.indexWhere((m) => m.id == material.id);
    if (index != -1) {
      _allMaterials[index] = updatedMaterial;
    }
    
    if (updatedMaterial.isFavorite) {
      _myFavorites.add(updatedMaterial);
    } else {
      _myFavorites.removeWhere((m) => m.id == material.id);
    }
  });
}

5.2 资料下载实现

void _downloadMaterial(Material material) {
  setState(() {
    final index = _allMaterials.indexWhere((m) => m.id == material.id);
    if (index != -1) {
      _allMaterials[index] = material.copyWith(
        downloadCount: material.downloadCount + 1,
      );
    }
  });

  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('开始下载: ${material.title}')),
  );
}

5.3 资料筛选实现

List<Material> _getFilteredMaterials() {
  List<Material> filtered = _allMaterials;
  
  if (_selectedSubject != null) {
    filtered = filtered.where((m) => m.subject == _selectedSubject).toList();
  }
  
  if (_selectedType != null) {
    filtered = filtered.where((m) => m.type == _selectedType).toList();
  }
  
  if (_selectedGrade != null) {
    filtered = filtered.where((m) => m.grade == _selectedGrade).toList();
  }
  
  if (_searchQuery.isNotEmpty) {
    filtered = filtered.where((m) => 
      m.title.toLowerCase().contains(_searchQuery.toLowerCase()) ||
      m.description.toLowerCase().contains(_searchQuery.toLowerCase())
    ).toList();
  }
  
  return filtered;
}

5.4 搜索功能实现

Widget _buildSearchBar() {
  return TextField(
    controller: _searchController,
    decoration: InputDecoration(
      hintText: '搜索资料...',
      prefixIcon: const Icon(Icons.search),
      suffixIcon: _searchQuery.isNotEmpty
          ? IconButton(
              icon: const Icon(Icons.clear),
              onPressed: () {
                setState(() {
                  _searchController.clear();
                  _searchQuery = '';
                });
              },
            )
          : null,
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(12),
      ),
      filled: true,
    ),
    onChanged: (value) {
      setState(() {
        _searchQuery = value;
      });
    },
  );
}

5.5 统计功能实现

Widget _buildQuickStats() {
  return Card(
    elevation: 2,
    child: Padding(
      padding: const EdgeInsets.all(16),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: [
          _buildStatItem(Icons.folder, '${_allMaterials.length}', '资料总数', Colors.deepPurple),
          _buildStatItem(Icons.download, '${_allMaterials.fold(0, (sum, m) => sum + m.downloadCount)}', '总下载', Colors.blue),
          _buildStatItem(Icons.favorite, '${_myFavorites.length}', '我的收藏', Colors.red),
        ],
      ),
    ),
  );
}

六、交互设计

6.1 资料浏览流程

详情 搜索 首页 学生 详情 搜索 首页 学生 打开应用 显示热门和最新资料 输入关键词 过滤资料列表 点击资料 显示详情 显示资料信息

6.2 筛选流程

打开分类页

显示筛选条件

选择科目

选择类型

选择年级

更新资料列表

有结果?

显示资料列表

显示空状态

点击资料

查看详情

6.3 收藏流程

点击资料

点击收藏

收藏成功

再次点击

取消成功

点击收藏

浏览资料

查看详情

收藏

已收藏

取消收藏

未收藏


七、扩展功能规划

7.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 2024-03-31 基础UI框架 资料浏览功能 搜索筛选功能 真实文件上传 真实文件下载 评论评分功能 云端存储 社交分享 积分系统 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 考试资料共享平台开发计划

7.2 功能扩展建议

7.2.1 真实文件上传下载

文件功能:

  • 文件选择器
  • 文件上传
  • 文件下载
  • 文件预览
7.2.2 评论评分

评论功能:

  • 资料评分
  • 文字评论
  • 评论回复
  • 举报功能
7.2.3 云端存储

存储功能:

  • 云端同步
  • 离线下载
  • 存储空间管理
  • 数据备份
7.2.4 积分系统

积分功能:

  • 上传资料获得积分
  • 下载资料消耗积分
  • 积分兑换
  • 积分排行榜

八、注意事项

8.1 开发注意事项

  1. 版权问题:确保上传的资料不侵犯版权

  2. 文件安全:对上传文件进行安全检查

  3. 数据验证:确保资料信息完整有效

  4. 状态管理:收藏和下载状态需正确同步

  5. 用户体验:搜索和筛选需响应及时

8.2 常见问题

问题 原因 解决方案
搜索无结果 关键词不匹配 提供搜索建议
收藏状态错误 状态更新错误 确保setState正确调用
筛选无结果 条件过严 提供默认选项
下载失败 网络问题 添加重试机制
详情显示异常 数据缺失 添加默认值

8.3 使用技巧

📚 资料共享使用技巧 📚

搜索技巧

  • 使用关键词搜索,如"高等数学"、“四级”
  • 结合筛选条件缩小范围
  • 查看热门资料发现优质资源

下载技巧

  • 查看资料评分和下载量
  • 阅读资料简介确认内容
  • 收藏感兴趣的资料方便查找

上传技巧

  • 填写详细的资料描述
  • 选择正确的科目和类型
  • 确保文件格式正确
  • 遵守版权规定

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+
Web浏览器 Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

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

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

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

十、总结

考试资料共享平台应用通过首页、分类、收藏、个人中心四大模块,为学生提供了一个便捷的学习资料共享平台。应用支持7种科目分类、5种资料类型、5个年级筛选,让学生可以快速找到需要的学习资料。

核心功能涵盖资料浏览、搜索筛选、资料下载、资料收藏四大模块。资料浏览支持热门和最新资料展示;搜索筛选支持关键词搜索和多条件筛选;资料下载支持下载计数;资料收藏方便学生管理感兴趣的资料。

应用采用 Material Design 3 设计规范,以优雅的深紫色为主色调,营造专业、学术的学习氛围。通过本应用,希望能够帮助学生共享学习资源,提高学习效率,共同进步。

考试资料共享平台——共享学习 共同进步


项目链接

  • 应用代码:f:\Flutter\flutter_harmonyos\lib\main_exam_materials.dart
  • 开发文档:f:\Flutter\flutter_harmonyos\docs\考试资料共享平台应用开发文档.md

运行效果图

(图片将在此处添加)


© 2024 考试资料共享平台开发团队

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

Logo

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

更多推荐