Flutter 框架跨平台鸿蒙开发 - 诚实挑战
运行效果图诚实挑战是一款独特的社交挑战游戏应用,核心理念是"和朋友聊天必须说真话,APP监听评分"。在这个充满社交面具的时代,真诚变得越来越珍贵。本应用创造了一个独特的社交场景,让朋友们在游戏中挑战彼此的诚实度,通过回答深度问题来增进了解、建立信任。应用采用游戏化的方式,将诚实这一抽象品质转化为可量化的评分系统。每次挑战包含多个精心设计的问题,涵盖诚实、秘密、情感、梦想等多个维度。参与者需要诚实回
诚实挑战应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
诚实挑战是一款独特的社交挑战游戏应用,核心理念是"和朋友聊天必须说真话,APP监听评分"。在这个充满社交面具的时代,真诚变得越来越珍贵。本应用创造了一个独特的社交场景,让朋友们在游戏中挑战彼此的诚实度,通过回答深度问题来增进了解、建立信任。
应用采用游戏化的方式,将诚实这一抽象品质转化为可量化的评分系统。每次挑战包含多个精心设计的问题,涵盖诚实、秘密、情感、梦想等多个维度。参与者需要诚实回答每个问题,APP会根据回答内容进行智能评分,最终给出诚实度评级。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 挑战创建 | 创建新的诚实挑战 | 表单输入 + 随机选题 |
| 问题系统 | 随机选择挑战问题 | 列表打乱 + 难度分级 |
| 监听评分 | 模拟监听并评分 | 动画效果 + 算法计算 |
| 诚实度评级 | 根据分数评定等级 | 枚举映射 + 颜色展示 |
| 挑战记录 | 保存历史挑战数据 | 列表存储 + 卡片展示 |
| 统计分析 | 统计挑战数据 | 数据聚合 + 可视化 |
1.3 诚实度等级
| 序号 | 等级 | Emoji | 分数范围 | 颜色 |
|---|---|---|---|---|
| 1 | 极度诚实 | 🌟 | 90-100 | #4CAF50 |
| 2 | 非常诚实 | 😊 | 75-89 | #8BC34A |
| 3 | 基本诚实 | 🙂 | 55-74 | #FFEB3B |
| 4 | 略有隐瞒 | 😐 | 35-54 | #FF9800 |
| 5 | 不够诚实 | 😕 | 0-34 | #F44336 |
1.4 问题分类
| 序号 | 类别 | 问题数量 | 难度范围 | 典型问题 |
|---|---|---|---|---|
| 1 | 诚实 | 1 | 3 | 你最近一次撒谎是什么时候? |
| 2 | 秘密 | 1 | 5 | 你有什么秘密从未告诉过任何人? |
| 3 | 自我 | 1 | 2 | 你对现在的自己满意吗? |
| 4 | 遗憾 | 1 | 4 | 你最后悔的一件事是什么? |
| 5 | 家庭 | 1 | 4 | 你有什么不敢告诉家人的事? |
| 6 | 情感 | 2 | 2-3 | 你最近一次哭是因为什么? |
| 7 | 恐惧 | 1 | 2 | 你最害怕失去什么? |
| 8 | 改变 | 1 | 3 | 你有什么想改变但改变不了的? |
| 9 | 友谊 | 1 | 4 | 你对朋友最不满意的一点是什么? |
| 10 | 梦想 | 1 | 1 | 你最想实现的愿望是什么? |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 动画控制 | AnimationController | - |
| 随机算法 | Random | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
二、项目结构
lib/
├── main_honest_challenge.dart # 应用主入口
│ ├── HonestChallengeApp # 根应用组件
│ ├── ChallengeStatus # 挑战状态枚举
│ ├── HonestyLevel # 诚实度等级枚举
│ ├── ChallengeQuestion # 挑战问题模型
│ ├── ChallengeRecord # 挑战记录模型
│ └── HonestChallengeHomePage # 主页面
三、数据模型
3.1 ChallengeStatus 枚举
enum ChallengeStatus {
waiting('等待开始', '⏳', Color(0xFFFFA726)),
inProgress('进行中', '🎯', Color(0xFF4CAF50)),
completed('已完成', '✅', Color(0xFF2196F3));
final String label;
final String emoji;
final Color color;
}
3.2 HonestyLevel 枚举
enum HonestyLevel {
excellent('极度诚实', '🌟', 95, Color(0xFF4CAF50)),
good('非常诚实', '😊', 80, Color(0xFF8BC34A)),
normal('基本诚实', '🙂', 65, Color(0xFFFFEB3B)),
poor('略有隐瞒', '😐', 45, Color(0xFFFF9800)),
bad('不够诚实', '😕', 25, Color(0xFFF44336));
final String label;
final String emoji;
final int score;
final Color color;
static HonestyLevel fromScore(int score) {
if (score >= 90) return HonestyLevel.excellent;
if (score >= 75) return HonestyLevel.good;
if (score >= 55) return HonestyLevel.normal;
if (score >= 35) return HonestyLevel.poor;
return HonestyLevel.bad;
}
}
3.3 ChallengeQuestion 模型
class ChallengeQuestion {
final String id; // 问题唯一标识
final String question; // 问题内容
final String category; // 问题类别
final int difficulty; // 难度等级(1-5星)
}
3.4 ChallengeRecord 模型
class ChallengeRecord {
final String id; // 挑战唯一标识
final String friendName; // 挑战对象名称
final List<ChallengeQuestion> questions; // 问题列表
final List<String> answers; // 回答列表
final List<int> scores; // 评分列表
final DateTime startTime; // 开始时间
final DateTime? endTime; // 结束时间
final ChallengeStatus status; // 挑战状态
final int totalScore; // 总评分
HonestyLevel get honestyLevel => HonestyLevel.fromScore(totalScore);
Duration get duration => endTime != null
? endTime!.difference(startTime)
: DateTime.now().difference(startTime);
}
四、核心功能实现
4.1 挑战流程
4.2 诚实度评分算法
int _calculateHonestyScore(String answer) {
final random = Random();
final baseScore = 50 + random.nextInt(50);
// 根据回答长度给予额外加分
if (answer.length > 50) {
return min(100, baseScore + 10);
} else if (answer.length > 30) {
return min(100, baseScore + 5);
}
return baseScore;
}
4.3 问题随机选择
void _startChallenge(String friendName) {
final random = Random();
final selectedQuestions = List<ChallengeQuestion>.from(_allQuestions)
..shuffle(random);
setState(() {
_currentChallenge = ChallengeRecord(
id: DateTime.now().millisecondsSinceEpoch.toString(),
friendName: friendName,
questions: selectedQuestions.take(5).toList(),
answers: [],
scores: [],
startTime: DateTime.now(),
status: ChallengeStatus.inProgress,
totalScore: 0,
);
_currentQuestionIndex = 0;
});
}
4.4 监听动画实现
void _startListening() {
setState(() {
_isListening = true;
});
_listeningController.repeat();
Future.delayed(const Duration(seconds: 3), () {
if (mounted) {
setState(() {
_isListening = false;
});
_listeningController.stop();
_listeningController.reset();
}
});
}
4.5 提交回答流程
五、界面设计
5.1 主页面布局
┌─────────────────────────────────────┐
│ 🎯 诚实挑战 │
│ 和朋友聊天必须说真话 │
├─────────────────────────────────────┤
│ 挑战统计 │
│ ┌─────┐┌─────┐┌─────┐ │
│ │ 🏆 ││ ✅ ││ ⭐ │ │
│ │ 2次 ││ 2次 ││ 82 │ │
│ │总挑战││已完成││平均分│ │
│ └─────┘└─────┘└─────┘ │
├─────────────────────────────────────┤
│ 挑战记录 2条记录│
│ ┌─────────────────────────────┐ │
│ │ 🎯 与 小明 的挑战 78分 │ │
│ │ 5个问题 · 15分钟 │ │
│ │ 非常诚实 😊 │ │
│ │ ───────────────────────── │ │
│ │ ████ ███ ██ ████ ███ │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ 🎯 与 小红 的挑战 86分 │ │
│ │ 5个问题 · 20分钟 │ │
│ │ 非常诚实 😊 │ │
│ │ ───────────────────────── │ │
│ │ █████ ████ ███ █████ ████ │ │
│ └─────────────────────────────┘ │
│ │
│ [开始挑战] │
└─────────────────────────────────────┘
5.2 挑战进行中页面
┌─────────────────────────────────────┐
│ ✕ 与 小明 的挑战 78分 │
│ 问题 1/5 │
├─────────────────────────────────────┤
│ ┌─────────────────────────────┐ │
│ │ [诚实] ⭐⭐⭐ │ │
│ │ │ │
│ │ 你最近一次撒谎是什么时候? │ │
│ │ │ │
│ └─────────────────────────────┘ │
│ │
│ 你的回答 │
│ ┌─────────────────────────────┐ │
│ │ 请诚实回答问题... │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ 🎤 正在监听评分... ▮▮▮ │ │
│ └─────────────────────────────┘ │
│ │
│ [开始监听] [提交回答] │
└─────────────────────────────────────┘
5.3 开始挑战弹窗
┌─────────────────────────────────────┐
│ ──── │
│ │
│ ➕ 开始新挑战 │
│ │
│ 挑战对象 │
│ ┌─────────────────────────────┐ │
│ │ 输入朋友的名字 │ │
│ └─────────────────────────────┘ │
│ │
│ 挑战规则 │
│ ┌─────────────────────────────┐ │
│ │ ✓ 必须诚实回答所有问题 │ │
│ │ ✓ APP将监听并评估诚实度 │ │
│ │ ✓ 完成所有问题后获得评分 │ │
│ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ 开始挑战 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
六、动画效果
6.1 图标脉冲动画
_pulseController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1500),
)..repeat(reverse: true);
AnimatedBuilder(
animation: _pulseController,
builder: (context, child) {
return Container(
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.green.withValues(
alpha: 0.3 + (_pulseController.value * 0.2)
),
blurRadius: 10 + (_pulseController.value * 5),
),
],
),
);
},
)
6.2 监听动画
_listeningController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 800),
);
// 监听指示器中的波形动画
Row(
children: List.generate(3, (index) {
return AnimatedContainer(
duration: Duration(milliseconds: 300 + index * 100),
width: 8,
height: 8 + (_listeningController.value * 12),
decoration: BoxDecoration(
color: Colors.green.shade400,
borderRadius: BorderRadius.circular(4),
),
);
}),
)
七、运行与调试
7.1 运行命令
# 运行到鸿蒙设备
flutter run -d harmony lib/main_honest_challenge.dart
# 运行到Web服务器
flutter run -d web-server -t lib/main_honest_challenge.dart --web-port 8126
# 运行到Windows
flutter run -d windows -t lib/main_honest_challenge.dart
# 代码分析
flutter analyze lib/main_honest_challenge.dart
7.2 功能测试清单
| 测试项 | 测试内容 | 预期结果 |
|---|---|---|
| 开始挑战 | 创建新挑战 | 挑战成功创建 |
| 问题显示 | 查看挑战问题 | 问题正确显示 |
| 回答提交 | 提交回答内容 | 评分正确计算 |
| 监听动画 | 启动监听功能 | 动画流畅播放 |
| 评分计算 | 查看诚实度评分 | 分数合理准确 |
| 挑战完成 | 完成所有问题 | 记录正确保存 |
八、扩展方向
8.1 后端集成
┌─────────────┐ HTTPS ┌─────────────┐
│ 客户端 │ ←─────────────→ │ 服务器 │
└─────────────┘ └─────────────┘
│ │
│ 挑战数据同步 │
│ 用户认证 │
│ 真实语音分析 │
│ 好友系统 │
↓ ↓
┌─────────────┐ ┌─────────────┐
│ 本地存储 │ │ 云端数据库 │
└─────────────┘ └─────────────┘
8.2 功能扩展计划
| 版本 | 功能 | 描述 |
|---|---|---|
| v1.1 | 真实语音监听 | 调用麦克风进行真实语音分析 |
| v1.2 | 好友系统 | 添加好友并邀请挑战 |
| v1.3 | 排行榜 | 查看诚实度排行榜 |
| v1.4 | 成就系统 | 解锁诚实成就徽章 |
| v1.5 | 社区分享 | 分享挑战结果到社区 |
8.3 高级功能
九、使用场景
9.1 典型使用场景
🎯 诚实挑战使用场景 🎯
| 场景 | 描述 | 适用人群 |
|---|---|---|
| 朋友聚会 | 增进朋友间的了解 | 年轻人、学生 |
| 情侣互动 | 加深情侣间的信任 | 情侣 |
| 团队建设 | 增强团队凝聚力 | 企业团队 |
| 自我反思 | 通过问题认识自己 | 个人成长 |
| 破冰游戏 | 快速拉近距离 | 新朋友 |
9.2 挑戛建议
┌─────────────────────────────────────────────────────────┐
│ 挑戛建议 │
├─────────────────────────────────────────────────────────┤
│ │
│ 🎯 挑战前准备 │
│ • 选择信任的朋友进行挑战 │
│ • 保持开放和真诚的心态 │
│ • 准备好面对深度问题 │
│ • 确保安静的环境 │
│ │
│ 💡 回答技巧 │
│ • 认真思考后再回答 │
│ • 尽量详细地表达 │
│ • 不要回避敏感问题 │
│ • 保持诚实和真诚 │
│ │
│ 🤝 互动建议 │
│ • 尊重对方的回答 │
│ • 不要评判或嘲笑 │
│ • 可以追问深入了解 │
│ • 分享自己的感受 │
│ │
└─────────────────────────────────────────────────────────┘
十、心理学原理
10.1 自我暴露理论
| 概念 | 说明 | 应用 |
|---|---|---|
| 自我暴露 | 向他人透露个人信息的过程 | 通过问题引导暴露 |
| 社会渗透 | 关系由浅入深的发展 | 逐步深入的问题设计 |
| 互惠原则 | 暴露会引发对方的暴露 | 双方轮流回答 |
| 信任建立 | 通过暴露建立信任关系 | 诚实评分反馈 |
10.2 诚实心理学
🧠 诚实心理学原理 🧠
诚实的好处
- 增强自我认同感
- 减少心理负担
- 建立真实关系
- 提升心理健康
诚实的挑战
- 面对真相的勇气
- 可能的社交风险
- 情感暴露的脆弱
- 自我保护本能
十一、问题设计原则
11.1 问题设计理念
| 原则 | 说明 | 示例 |
|---|---|---|
| 渐进深入 | 从简单到复杂 | 先问梦想,再问遗憾 |
| 多维度覆盖 | 涵盖生活各方面 | 情感、家庭、友谊等 |
| 开放性 | 没有标准答案 | “你最害怕失去什么?” |
| 安全性 | 不涉及敏感隐私 | 避免过于私密的问题 |
11.2 难度分级
┌─────────────────────────────────────────────────────────┐
│ 问题难度分级 │
├─────────────────────────────────────────────────────────┤
│ │
│ ⭐ 简单问题 │
│ • 容易回答 │
│ • 不涉及深层情感 │
│ • 示例:你最想实现的愿望是什么? │
│ │
│ ⭐⭐ 中等问题 │
│ • 需要一定思考 │
│ • 涉及轻度情感 │
│ • 示例:你对现在的自己满意吗? │
│ │
│ ⭐⭐⭐ 较难问题 │
│ • 需要深入思考 │
│ • 涉及深层情感 │
│ • 示例:你最近一次撒谎是什么时候? │
│ │
│ ⭐⭐⭐⭐ 困难问题 │
│ • 触及内心深处 │
│ • 可能涉及敏感话题 │
│ • 示例:你最后悔的一件事是什么? │
│ │
│ ⭐⭐⭐⭐⭐ 极难问题 │
│ • 最深层的自我暴露 │
│ • 需要极大勇气 │
│ • 示例:你有什么秘密从未告诉过任何人? │
│ │
└─────────────────────────────────────────────────────────┘
十二、总结
诚实挑战应用通过"和朋友聊天必须说真话,APP监听评分"的核心理念,为用户提供了一个独特的社交游戏体验。应用涵盖挑战创建、问题系统、监听评分、诚实度评级、挑战记录、统计分析六大核心功能,让用户在游戏中增进了解、建立信任。
应用采用绿色主题,象征真诚、信任。主页面清晰展示挑战统计和历史记录,挑战进行中页面展示当前问题、回答输入框和监听指示器。每个问题都标注了类别和难度,帮助用户了解问题的深度。
监听评分功能采用模拟方式,通过动画效果展示监听过程,根据回答长度和随机算法计算诚实度评分。最终评分分为五个等级:极度诚实、非常诚实、基本诚实、略有隐瞒、不够诚实,每个等级都有对应的颜色和emoji。
应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。后续版本计划增加真实语音监听、好友系统、排行榜、成就系统、社区分享等功能,为用户提供更完整的社交挑战体验。
通过诚实挑战应用,用户可以在游戏中增进与朋友的了解,建立更深层次的信任关系,同时也能通过回答问题进行自我反思和成长。
诚实面对自己,真诚对待他人 🎯
更多推荐




所有评论(0)