诚实挑战应用


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

一、项目概述

运行效果图

image-20260408195013864

image-20260408195022016

image-20260408195032717

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 挑战流程

点击开始挑战

输入朋友名字

随机选择问题

显示第一个问题

输入回答

点击开始监听

监听动画3秒

计算诚实度评分

还有更多问题?

显示下一个问题

计算总分

显示诚实度评级

保存挑战记录

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 提交回答流程

评分系统 应用 用户 评分系统 应用 用户 alt [还有问题] [挑战完成] 输入回答内容 点击提交回答 计算诚实度评分 分析回答长度 生成随机基础分 返回评分结果 更新挑战记录 检查是否还有问题 显示下一个问题 计算平均分 显示诚实度评级

五、界面设计

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 高级功能

诚实挑战

AI分析

社交功能

游戏化

语音情感分析

文本语义分析

微表情识别

好友对战

团队挑战

匿名挑战

成就徽章

等级系统

排行榜


九、使用场景

9.1 典型使用场景

🎯 诚实挑战使用场景 🎯

场景 描述 适用人群
朋友聚会 增进朋友间的了解 年轻人、学生
情侣互动 加深情侣间的信任 情侣
团队建设 增强团队凝聚力 企业团队
自我反思 通过问题认识自己 个人成长
破冰游戏 快速拉近距离 新朋友

9.2 挑戛建议

┌─────────────────────────────────────────────────────────┐
│                   挑戛建议                              │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  🎯 挑战前准备                                           │
│     • 选择信任的朋友进行挑战                             │
│     • 保持开放和真诚的心态                               │
│     • 准备好面对深度问题                                 │
│     • 确保安静的环境                                     │
│                                                          │
│  💡 回答技巧                                             │
│     • 认真思考后再回答                                   │
│     • 尽量详细地表达                                     │
│     • 不要回避敏感问题                                   │
│     • 保持诚实和真诚                                     │
│                                                          │
│  🤝 互动建议                                             │
│     • 尊重对方的回答                                     │
│     • 不要评判或嘲笑                                     │
│     • 可以追问深入了解                                   │
│     • 分享自己的感受                                     │
│                                                          │
└─────────────────────────────────────────────────────────┘

十、心理学原理

10.1 自我暴露理论

概念 说明 应用
自我暴露 向他人透露个人信息的过程 通过问题引导暴露
社会渗透 关系由浅入深的发展 逐步深入的问题设计
互惠原则 暴露会引发对方的暴露 双方轮流回答
信任建立 通过暴露建立信任关系 诚实评分反馈

10.2 诚实心理学

🧠 诚实心理学原理 🧠

诚实的好处

  • 增强自我认同感
  • 减少心理负担
  • 建立真实关系
  • 提升心理健康

诚实的挑战

  • 面对真相的勇气
  • 可能的社交风险
  • 情感暴露的脆弱
  • 自我保护本能

十一、问题设计原则

11.1 问题设计理念

原则 说明 示例
渐进深入 从简单到复杂 先问梦想,再问遗憾
多维度覆盖 涵盖生活各方面 情感、家庭、友谊等
开放性 没有标准答案 “你最害怕失去什么?”
安全性 不涉及敏感隐私 避免过于私密的问题

11.2 难度分级

┌─────────────────────────────────────────────────────────┐
│                   问题难度分级                          │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ⭐ 简单问题                                             │
│     • 容易回答                                           │
│     • 不涉及深层情感                                     │
│     • 示例:你最想实现的愿望是什么?                     │
│                                                          │
│  ⭐⭐ 中等问题                                           │
│     • 需要一定思考                                       │
│     • 涉及轻度情感                                       │
│     • 示例:你对现在的自己满意吗?                       │
│                                                          │
│  ⭐⭐⭐ 较难问题                                         │
│     • 需要深入思考                                       │
│     • 涉及深层情感                                       │
│     • 示例:你最近一次撒谎是什么时候?                   │
│                                                          │
│  ⭐⭐⭐⭐ 困难问题                                       │
│     • 触及内心深处                                       │
│     • 可能涉及敏感话题                                   │
│     • 示例:你最后悔的一件事是什么?                     │
│                                                          │
│  ⭐⭐⭐⭐⭐ 极难问题                                     │
│     • 最深层的自我暴露                                   │
│     • 需要极大勇气                                       │
│     • 示例:你有什么秘密从未告诉过任何人?               │
│                                                          │
└─────────────────────────────────────────────────────────┘

十二、总结

诚实挑战应用通过"和朋友聊天必须说真话,APP监听评分"的核心理念,为用户提供了一个独特的社交游戏体验。应用涵盖挑战创建、问题系统、监听评分、诚实度评级、挑战记录、统计分析六大核心功能,让用户在游戏中增进了解、建立信任。

应用采用绿色主题,象征真诚、信任。主页面清晰展示挑战统计和历史记录,挑战进行中页面展示当前问题、回答输入框和监听指示器。每个问题都标注了类别和难度,帮助用户了解问题的深度。

监听评分功能采用模拟方式,通过动画效果展示监听过程,根据回答长度和随机算法计算诚实度评分。最终评分分为五个等级:极度诚实、非常诚实、基本诚实、略有隐瞒、不够诚实,每个等级都有对应的颜色和emoji。

应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。后续版本计划增加真实语音监听、好友系统、排行榜、成就系统、社区分享等功能,为用户提供更完整的社交挑战体验。

通过诚实挑战应用,用户可以在游戏中增进与朋友的了解,建立更深层次的信任关系,同时也能通过回答问题进行自我反思和成长。

诚实面对自己,真诚对待他人 🎯


Logo

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

更多推荐