开源鸿蒙跨平台Flutter开发:脑筋急转弯应用开发文档

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

一、项目概述

运行效果图

1.1 应用简介

脑筋急转弯是一款有趣的思维训练应用,包含各种类型的题目,适合和朋友一起玩,锻炼思维能力。应用内置多种难度和分类的题目,支持随机获取题目、查看答案、收藏喜欢的题目等功能。

应用以紫色为主色调,象征智慧和创意。涵盖题目浏览、分类管理、收藏夹、设置四大模块。用户可以通过筛选条件选择特定难度和分类的题目,挑战自己的思维能力。

1.2 核心功能

功能模块 功能描述 实现方式
随机题目 随机获取题目 随机算法
难度筛选 3级难度选择 下拉选择
分类筛选 5种题目分类 下拉选择
答案查看 显示/隐藏答案 按钮切换
题目收藏 收藏喜欢的题目 状态管理
题目点赞 为题目点赞 计数器
分类浏览 查看各分类题目数量 网格展示
收藏管理 管理收藏的题目 列表展示

1.3 难度等级定义

序号 难度名称 Emoji 描述
1 简单 🧩 适合初学者
2 中等 🔍 有一定挑战
3 困难 🧠 挑战思维

1.4 题目分类定义

序号 分类名称 Emoji 描述
1 逻辑推理 🧩 考验逻辑思维
2 数学题 🔢 数学相关题目
3 文字游戏 📝 文字类题目
4 生活常识 🏠 生活相关题目
5 脑筋急转弯 🤔 经典急转弯

1.5 技术栈

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

1.6 项目结构

复制代码
lib/
└── main_brain_teaser.dart
    ├── BrainTeaserApp          # 应用入口
    ├── Difficulty              # 难度等级枚举
    ├── Category                # 题目分类枚举
    ├── BrainTeaser             # 题目模型
    ├── BrainTeaserHomePage     # 主页面(底部导航)
    ├── _buildHomePage          # 首页(题目展示)
    ├── _buildCategoriesPage    # 分类页面
    ├── _buildFavoritesPage     # 收藏页面
    ├── _buildSettingsPage      # 设置页面
    ├── _loadRandomTeaser       # 随机获取题目
    ├── _toggleFavorite         # 收藏/取消收藏
    └── _likeTeaser             # 点赞功能

二、系统架构

2.1 整体架构图

Data Layer
Business Layer
Presentation Layer
主页面

BrainTeaserHomePage
首页
分类页
收藏页
设置页
题目展示
筛选条件
操作按钮
分类网格
收藏列表
应用设置
使用提示
题目管理器

TeaserManager
收藏管理器

FavoriteManager
点赞管理器

LikeManager
BrainTeaser

题目模型
Difficulty

难度等级
Category

题目分类

2.2 类图设计

has
has
manages
BrainTeaserApp
+Widget build()
<<enumeration>>
Difficulty
+String label
+String emoji
+Color color
+easy()
+medium()
+hard()
<<enumeration>>
Category
+String label
+String emoji
+Color color
+logic()
+math()
+word()
+life()
+trick()
BrainTeaser
+String id
+String question
+String answer
+Difficulty difficulty
+Category category
+String hint
+int likes
+bool isFavorite
+BrainTeaser copyWith()
BrainTeaserHomePage
-List _brainTeasers
-List _favoriteTeasers
-BrainTeaser? _currentTeaser
-bool _showAnswer
-Difficulty? _selectedDifficulty
-Category? _selectedCategory
+void _loadRandomTeaser()
+void _toggleFavorite()
+void _likeTeaser()

2.3 页面导航流程

首页
分类
收藏
设置




应用启动
首页
底部导航
随机题目
分类浏览
收藏列表
应用设置
筛选条件
获取题目
查看题目
显示答案?
显示答案
显示提示
收藏?
添加到收藏
继续浏览
下一题

2.4 题目获取流程

数据存储 题目管理器 首页 用户 数据存储 题目管理器 首页 用户 点击下一题 请求随机题目 应用筛选条件 获取符合条件的题目 返回题目列表 随机选择题目 返回题目 显示题目 点击显示答案 显示答案 点击收藏 标记收藏 更新收藏状态


三、核心模块设计

3.1 数据模型设计

3.1.1 难度等级枚举 (Difficulty)
dart 复制代码
enum Difficulty {
  easy(label: '简单', emoji: '🧩', color: Colors.green),
  medium(label: '中等', emoji: '🔍', color: Colors.orange),
  hard(label: '困难', emoji: '🧠', color: Colors.red);

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

  const Difficulty({
    required this.label,
    required this.emoji,
    required this.color,
  });
}
3.1.2 题目分类枚举 (Category)
dart 复制代码
enum Category {
  logic(label: '逻辑推理', emoji: '🧩', color: Colors.blue),
  math(label: '数学题', emoji: '🔢', color: Colors.green),
  word(label: '文字游戏', emoji: '📝', color: Colors.orange),
  life(label: '生活常识', emoji: '🏠', color: Colors.purple),
  trick(label: '脑筋急转弯', emoji: '🤔', color: Colors.red);

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

  const Category({
    required this.label,
    required this.emoji,
    required this.color,
  });
}
3.1.3 题目模型 (BrainTeaser)
dart 复制代码
class BrainTeaser {
  final String id;
  final String question;
  final String answer;
  final Difficulty difficulty;
  final Category category;
  final String hint;
  final int likes;
  final bool isFavorite;

  BrainTeaser({
    required this.id,
    required this.question,
    required this.answer,
    required this.difficulty,
    required this.category,
    required this.hint,
    this.likes = 0,
    this.isFavorite = false,
  });

  BrainTeaser copyWith({
    String? id,
    String? question,
    String? answer,
    Difficulty? difficulty,
    Category? category,
    String? hint,
    int? likes,
    bool? isFavorite,
  });
}
3.1.4 题目难度分布

40% 35% 25% 题目难度分布 简单 中等 困难

3.1.5 题目分类分布

25% 20% 20% 20% 15% 题目分类分布 逻辑推理 数学题 文字游戏 生活常识 脑筋急转弯

3.2 页面结构设计

3.2.1 主页面布局

BrainTeaserHomePage
IndexedStack
首页
分类页
收藏页
设置页
NavigationBar
首页 Tab
分类 Tab
收藏 Tab
设置 Tab

3.2.2 首页结构

首页
SliverAppBar
筛选条件
题目展示
操作按钮
难度选择
分类选择
题目信息
题目内容
提示/答案
收藏/点赞
显示/隐藏答案
下一题

3.2.3 分类页面结构

分类页
SliverAppBar
分类网格
逻辑推理
数学题
文字游戏
生活常识
脑筋急转弯
题目数量
题目数量
题目数量
题目数量
题目数量

3.2.4 收藏页面结构

收藏页
SliverAppBar
收藏列表
题目卡片
题目信息
题目内容
答案
取消收藏

3.3 随机题目获取逻辑





开始
获取所有题目
应用筛选条件?
按难度筛选
按分类筛选
有符合条件的题目?
生成随机索引
返回随机题目
显示无题目提示
结束

3.4 收藏管理逻辑



点击收藏按钮
当前题目是否已收藏?
取消收藏
从收藏列表移除
更新题目状态
添加收藏
添加到收藏列表
更新UI显示
结束


四、UI设计规范

4.1 配色方案

应用以紫色为主色调,象征智慧和创意:

颜色类型 色值 用途
主色 #9C27B0 (Purple) 导航、主题元素
辅助色 #BA68C8 分类页面
第三色 #CE93D8 收藏页面
强调色 #E1BEE7 设置页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 题目卡片

4.2 难度等级颜色

难度 色值 视觉效果
简单 #4CAF50 绿色
中等 #FF9800 橙色
困难 #F44336 红色

4.3 分类颜色

分类 色值 视觉效果
逻辑推理 #2196F3 蓝色
数学题 #4CAF50 绿色
文字游戏 #FF9800 橙色
生活常识 #9C27B0 紫色
脑筋急转弯 #F44336 红色

4.4 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
题目内容 18px Bold #000000
答案内容 16px Regular #000000
提示内容 14px Regular #666666
分类标签 12px Regular 分类颜色

4.5 组件规范

4.5.1 筛选条件区域
复制代码
┌─────────────────────────────────────┐
│  筛选条件                            │
│                                     │
│  ┌─────────────────┐ ┌─────────────────┐ │
│  │  难度           │ │  分类           │ │
│  │  🧩 简单 ▼      │ │  🧩 逻辑推理 ▼  │ │
│  └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────┘
4.5.2 题目展示区域
复制代码
┌─────────────────────────────────────┐
│  🧩 逻辑推理   🔍 中等              │
│                                     │
│  什么东西早晨四条腿,中午两条腿,晚上三条腿? │
│                                     │
│  ┌──────────────────────────────┐   │
│  │  提示: 这是一个经典的谜语,描  │   │
│  │  述了人的一生                 │   │
│  └──────────────────────────────┘   │
│                                     │
│  👍 0                                │
└─────────────────────────────────────┘
4.5.3 操作按钮区域
复制代码
┌─────────────────────────────────────┐
│  [👁️ 显示答案]                    │
│  [🔄 下一题]                      │
└─────────────────────────────────────┘
4.5.4 分类网格
复制代码
┌─────────────────────────────────────┐
│  ┌──────┐ ┌──────┐ ┌──────┐        │
│  │  🧩  │ │  🔢  │ │  📝  │        │
│  │逻辑推理│ │数学题│ │文字游戏│        │
│  │  3题  │ │  2题  │ │  2题  │        │
│  └──────┘ └──────┘ └──────┘        │
│  ┌──────┐ ┌──────┐                  │
│  │  🏠  │ │  🤔  │                  │
│  │生活常识│ │脑筋急转弯│                │
│  │  1题  │ │  2题  │                  │
│  └──────┘ └──────┘                  │
└─────────────────────────────────────┘

五、核心功能实现

5.1 随机题目获取实现

dart 复制代码
void _loadRandomTeaser() {
  if (_brainTeasers.isEmpty) return;

  List<BrainTeaser> filteredTeasers = _brainTeasers;
  
  if (_selectedDifficulty != null) {
    filteredTeasers = filteredTeasers.where((teaser) => teaser.difficulty == _selectedDifficulty).toList();
  }
  
  if (_selectedCategory != null) {
    filteredTeasers = filteredTeasers.where((teaser) => teaser.category == _selectedCategory).toList();
  }

  if (filteredTeasers.isEmpty) {
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('没有符合条件的题目')),
    );
    return;
  }

  final random = Random();
  final randomIndex = random.nextInt(filteredTeasers.length);
  
  setState(() {
    _currentTeaser = filteredTeasers[randomIndex];
    _showAnswer = false;
  });
}

5.2 收藏功能实现

dart 复制代码
void _toggleFavorite() {
  if (_currentTeaser == null) return;

  setState(() {
    final updatedTeaser = _currentTeaser!.copyWith(
      isFavorite: !_currentTeaser!.isFavorite,
    );
    
    _currentTeaser = updatedTeaser;
    
    final index = _brainTeasers.indexWhere((teaser) => teaser.id == updatedTeaser.id);
    if (index != -1) {
      _brainTeasers[index] = updatedTeaser;
    }
    
    if (updatedTeaser.isFavorite) {
      _favoriteTeasers.add(updatedTeaser);
    } else {
      _favoriteTeasers.removeWhere((teaser) => teaser.id == updatedTeaser.id);
    }
  });
}

5.3 点赞功能实现

dart 复制代码
void _likeTeaser() {
  if (_currentTeaser == null) return;

  setState(() {
    final updatedTeaser = _currentTeaser!.copyWith(
      likes: _currentTeaser!.likes + 1,
    );
    
    _currentTeaser = updatedTeaser;
    
    final index = _brainTeasers.indexWhere((teaser) => teaser.id == updatedTeaser.id);
    if (index != -1) {
      _brainTeasers[index] = updatedTeaser;
    }
    
    final favIndex = _favoriteTeasers.indexWhere((teaser) => teaser.id == updatedTeaser.id);
    if (favIndex != -1) {
      _favoriteTeasers[favIndex] = updatedTeaser;
    }
  });
}

5.4 题目展示实现

dart 复制代码
Widget _buildCurrentTeaser() {
  if (_currentTeaser == null) {
    return Card(
      elevation: 2,
      child: Padding(
        padding: const EdgeInsets.all(32),
        child: Column(
          children: [
            Icon(
              Icons.question_mark_outlined,
              size: 64,
              color: Theme.of(context).colorScheme.outline,
            ),
            const SizedBox(height: 16),
            Text(
              '点击下方按钮获取题目',
              style: Theme.of(context).textTheme.titleMedium,
            ),
          ],
        ),
      ),
    );
  }

  return Card(
    elevation: 2,
    child: Padding(
      padding: const EdgeInsets.all(24),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          // 题目信息
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Row(
                children: [
                  Text(_currentTeaser!.category.emoji),
                  const SizedBox(width: 8),
                  Text(
                    _currentTeaser!.category.label,
                    style: TextStyle(
                      color: _currentTeaser!.category.color,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                  // 难度标签
                ],
              ),
              // 收藏按钮
            ],
          ),
          // 题目内容
          Text(
            _currentTeaser!.question,
            style: Theme.of(context).textTheme.titleLarge?.copyWith(
                  fontWeight: FontWeight.bold,
                ),
          ),
          // 提示/答案
          if (_showAnswer)
            // 显示答案
          else
            // 显示提示
          // 点赞按钮
        ],
      ),
    ),
  );
}

5.5 分类页面实现

dart 复制代码
Widget _buildCategoriesPage() {
  return CustomScrollView(
    slivers: [
      SliverAppBar(
        expandedHeight: 120,
        floating: true,
        pinned: true,
        flexibleSpace: FlexibleSpaceBar(
          title: const Text('题目分类'),
          // 背景
        ),
      ),
      SliverPadding(
        padding: const EdgeInsets.all(16),
        sliver: SliverGrid(
          gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
            childAspectRatio: 1.5,
            crossAxisSpacing: 12,
            mainAxisSpacing: 12,
          ),
          delegate: SliverChildBuilderDelegate(
            (context, index) {
              final category = Category.values[index];
              final teaserCount = _brainTeasers.where((teaser) => teaser.category == category).length;

              return Card(
                elevation: 2,
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Column(
                    children: [
                      Text(category.emoji, style: const TextStyle(fontSize: 48)),
                      const SizedBox(height: 12),
                      Text(category.label, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
                      const SizedBox(height: 8),
                      Text('$teaserCount 题', style: TextStyle(color: Theme.of(context).colorScheme.outline)),
                    ],
                  ),
                ),
              );
            },
            childCount: Category.values.length,
          ),
        ),
      ),
    ],
  );
}

六、交互设计

6.1 题目浏览流程

题目管理器 首页 用户 题目管理器 首页 用户 打开应用 加载题目数据 返回题目列表 显示初始题目 点击下一题 请求随机题目 返回随机题目 显示新题目 点击显示答案 显示答案 点击收藏 标记收藏 确认收藏 更新收藏状态

6.2 筛选操作流程

打开筛选条件
选择难度
选择分类
点击下一题
获取符合条件的题目
显示题目

6.3 收藏管理流程

点击收藏 Tab
浏览收藏列表
点击取消收藏
更新列表
点击返回
首页
收藏页面
查看收藏
取消收藏


七、扩展功能规划

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 多人对战

对战功能:

  • 实时对战模式
  • 积分系统
  • 排行榜
  • 成就徽章

八、注意事项

8.1 开发注意事项

  1. 数据管理:题目数据需合理组织,方便筛选和检索

  2. 性能优化:随机题目生成需考虑性能,避免卡顿

  3. 用户体验:界面交互需流畅,反馈及时

  4. 状态管理:收藏和点赞状态需正确同步

  5. 错误处理:无符合条件题目时需提供友好提示

8.2 常见问题

问题 原因 解决方案
题目重复 随机算法问题 记录已显示题目
筛选无结果 条件过严 提供默认题目
收藏不同步 状态管理问题 统一状态更新
点赞计数错误 并发操作 原子操作更新
界面卡顿 重绘频繁 优化渲染逻辑

8.3 使用技巧

🧠 脑筋急转弯技巧 🧠

解题技巧

  • 逻辑推理:从多角度思考,不要局限于常规思维
  • 数学题:注意数字的特殊性质和规律
  • 文字游戏:关注谐音、多义字和词语组合
  • 生活常识:结合日常生活经验
  • 脑筋急转弯:打破常规思维,寻找意外答案

游戏建议

  • 和朋友一起玩,增加趣味性
  • 设置时间限制,提高挑战性
  • 记录自己的答题正确率
  • 收藏喜欢的题目,反复挑战
  • 尝试自己创作题目

九、运行说明

9.1 环境要求

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

9.2 运行命令

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

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

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

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

十、总结

脑筋急转弯应用通过题目浏览、分类管理、收藏夹、设置四大模块,为用户提供了一个有趣的思维训练平台。应用支持3级难度、5种分类的题目,让用户可以根据自己的喜好选择题目,挑战思维能力。

核心功能涵盖随机题目获取、难度和分类筛选、答案查看、题目收藏、题目点赞等。用户可以通过筛选条件选择特定类型的题目,也可以随机获取题目,挑战自己的思维能力。应用还支持收藏喜欢的题目,方便后续查看和分享。

应用采用 Material Design 3 设计规范,以紫色为主色调,象征智慧和创意。通过本应用,希望能够帮助用户锻炼思维能力,增加生活乐趣,同时也为朋友们提供一个有趣的互动游戏。

脑筋急转弯------挑战你的思维极限

相关推荐
不爱吃糖的程序媛2 小时前
深入理解鸿蒙PC 三方库构建系统中的HPKCHECK文件
华为·harmonyos
好运的阿财2 小时前
大模型热切换功能完整实现指南
人工智能·python·程序人生·开源·ai编程
2301_822703203 小时前
Flutter 框架跨平台鸿蒙开发 - 家庭时间胶囊应用
算法·flutter·华为·图形渲染·harmonyos·鸿蒙
提子拌饭1333 小时前
Flutter 框架跨平台鸿蒙开发 - 声音风景分享应用
flutter·华为·harmonyos·鸿蒙·风景
独特的螺狮粉3 小时前
开源鸿蒙跨平台Flutter开发:超市购物清单应用
flutter·华为·开源·harmonyos·鸿蒙
2301_822703203 小时前
成语小词典:鸿蒙Flutter实现的成语查询与管理应用
算法·flutter·华为·开源·图形渲染·harmonyos
诺伦3 小时前
谷歌Gemma 4发布:开源模型进入GPU加速时代,本地部署怎么做
开源
程序员鱼皮4 小时前
太秀了,我把自己蒸馏成了 Skill!已开源
ai·程序员·开源·编程·ai编程
2301_822703204 小时前
Flutter 框架跨平台鸿蒙开发 - 智能植物生长记录应用
算法·flutter·华为·harmonyos·鸿蒙