Flutter 框架跨平台鸿蒙开发 - 关系测试应用
·
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图




1.1 应用简介
关系测试是一款探索人际关系脆弱性的创新应用。通过精心设计的测试场景和问题,帮助用户了解自己与朋友、家人、伴侣之间关系的真实强度。应用不追求简单的"好"或"坏"结论,而是引导用户深入思考关系的本质,发现那些被忽视的裂痕和隐患。
每个测试都模拟真实生活中可能遇到的情况,从金钱、信任、时间、价值观等多个维度考验关系的韧性。测试结果不是简单的分数,而是一份关系诊断报告,帮助用户更清醒地认识自己的人际关系。
1.2 核心理念
真正的友谊需要经得起考验,而了解脆弱才能更好地守护。关系测试的设计理念基于以下原则:
| 设计原则 | 理论基础 | 应用体现 |
|---|---|---|
| 压力测试 | 关系韧性理论 | 模拟压力场景测试关系 |
| 多维评估 | 社会支持理论 | 从多个维度评估关系 |
| 诚实面对 | 自我认知理论 | 引导用户诚实回答 |
| 理性分析 | 关系投资模型 | 分析关系的投入与回报 |
1.3 核心功能
1.4 关系类型分类
应用支持多种关系类型测试:
| 类型 | 图标 | 颜色 | 描述 | 测试重点 |
|---|---|---|---|---|
| 友谊 | 👫 | #2196F3 | 普通朋友关系 | 信任、支持、理解 |
| 挚友 | 💝 | #E91E63 | 亲密朋友关系 | 忠诚、包容、牺牲 |
| 恋人 | 💕 | #F44336 | 恋爱关系 | 信任、未来、沟通 |
| 家人 | 👨👩👧👦 | #4CAF50 | 家庭关系 | 责任、包容、支持 |
| 同事 | 💼 | #FF9800 | 工作关系 | 利益、竞争、合作 |
| 熟人 | 👋 | #607D8B | 泛泛之交 | 边界、礼貌、距离 |
1.5 测试维度系统
| 维度 | 图标 | 描述 | 典型问题 |
|---|---|---|---|
| 信任 | 🤝 | 信任程度 | 会借钱给TA吗? |
| 金钱 | 💰 | 金钱关系 | AA制还是请客? |
| 时间 | ⏰ | 时间投入 | 愿意花多少时间? |
| 危机 | 🆘 | 危机应对 | 遇到困难会帮忙吗? |
| 秘密 | 🔐 | 秘密分享 | 会告诉TA秘密吗? |
| 价值观 | 💭 | 价值认同 | 能接受TA的选择吗? |
| 边界 | 🚧 | 个人边界 | 能拒绝TA吗? |
| 未来 | 🔮 | 未来预期 | 关系会持续多久? |
1.6 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 动画控制 | AnimationController | - |
| 状态管理 | setState | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.7 项目结构
lib/
└── main_relationship_test.dart
├── RelationshipTestApp # 应用入口
├── RelationType # 关系类型枚举
├── TestDimension # 测试维度枚举
├── Relationship # 关系模型
├── TestQuestion # 测试问题模型
├── TestResult # 测试结果模型
├── RelationshipTestPage # 主页面(底部导航)
├── _buildTestPage # 测试页面
├── _buildRelationshipsPage # 关系列表
└── _buildHistoryPage # 历史记录
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 测试流程
2.4 评分算法流程
三、核心模块设计
3.1 数据模型设计
3.1.1 关系类型枚举 (RelationType)
enum RelationType {
friend('友谊', '👫', Color(0xFF2196F3), '普通朋友关系'),
bestFriend('挚友', '💝', Color(0xFFE91E63), '亲密朋友关系'),
lover('恋人', '💕', Color(0xFFF44336), '恋爱关系'),
family('家人', '👨👩👧👦', Color(0xFF4CAF50), '家庭关系'),
colleague('同事', '💼', Color(0xFFFF9800), '工作关系'),
acquaintance('熟人', '👋', Color(0xFF607D8B), '泛泛之交');
final String label;
final String icon;
final Color color;
final String description;
}
3.1.2 测试维度枚举 (TestDimension)
enum TestDimension {
trust('信任', '🤝', '信任程度与可靠性'),
money('金钱', '💰', '金钱关系与利益冲突'),
time('时间', '⏰', '时间投入与陪伴'),
crisis('危机', '🆘', '危机应对与支持'),
secret('秘密', '🔐', '秘密分享与保密'),
value('价值观', '💭', '价值认同与分歧'),
boundary('边界', '🚧', '个人边界与尊重'),
future('未来', '🔮', '未来预期与规划');
final String label;
final String icon;
final String description;
}
3.1.3 关系模型 (Relationship)
class Relationship {
final String id; // 唯一标识
final String name; // 关系名称
final RelationType type; // 关系类型
final DateTime createdAt; // 创建时间
final List<TestResult> testHistory; // 测试历史
final double? latestScore; // 最新分数
final String? notes; // 备注
}
3.1.4 测试问题模型 (TestQuestion)
class TestQuestion {
final String id; // 唯一标识
final String scenario; // 场景描述
final String question; // 问题内容
final TestDimension dimension;// 测试维度
final List<TestOption> options;// 选项列表
final int difficulty; // 难度等级(1-5)
}
3.1.5 测试结果模型 (TestResult)
class TestResult {
final String id; // 唯一标识
final String relationshipId; // 关系ID
final DateTime testDate; // 测试日期
final int totalScore; // 总分
final Map<String, int> dimensionScores; // 各维度分数
final String fragilityLevel; // 脆弱等级
final List<String> riskFactors; // 风险因素
final List<String> suggestions; // 改善建议
}
3.1.6 脆弱等级分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 测试页面结构
3.2.3 关系列表页面结构
3.3 评分算法
3.4 问题生成逻辑
List<TestQuestion> _generateQuestions(RelationType type) {
final questions = <TestQuestion>[];
// 根据关系类型选择重点维度
final priorityDimensions = _getPriorityDimensions(type);
// 为每个维度生成问题
for (final dimension in TestDimension.values) {
final weight = priorityDimensions.contains(dimension) ? 3 : 1;
for (int i = 0; i < weight; i++) {
questions.add(_createQuestion(dimension, type));
}
}
return questions..shuffle();
}
四、UI设计规范
4.1 配色方案
应用采用警示红为主色调,突出"脆弱性"主题:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主背景 | #0F1419 | 深色背景 |
| 卡片背景 | #1C2733 | 稍浅深色 |
| 主色 | #F44336 | 警示红 |
| 友谊 | #2196F3 | 蓝色 |
| 挚友 | #E91E63 | 粉红色 |
| 恋人 | #F44336 | 红色 |
| 家人 | #4CAF50 | 绿色 |
| 同事 | #FF9800 | 橙色 |
| 熟人 | #607D8B | 灰色 |
4.2 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 28px | Bold | #FFFFFF |
| 场景描述 | 16px | Regular | #B0BEC5 |
| 问题内容 | 18px | Medium | #FFFFFF |
| 选项文字 | 14px | Regular | #FFFFFF |
| 分数显示 | 48px | Bold | 等级颜色 |
| 维度标签 | 12px | Medium | 维度颜色 |
4.3 组件规范
4.3.1 测试界面
┌─────────────────────────────────────────────────┐
│ 关系测试 3/15 │
├─────────────────────────────────────────────────┤
│ │
│ ━━━━━━━━━━━━━━━━━━━━━●━━━━━━━━━━━━━━━━━━━━━ │
│ │
│ 💰 金钱维度 │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ │ │
│ │ 场景: │ │
│ │ TA突然向你借一笔较大的钱, │ │
│ │ 说有急用但没有说明具体原因... │ │
│ │ │ │
│ │ 问题: │ │
│ │ 你会借给TA吗? │ │
│ │ │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ A. 毫不犹豫,借给TA │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ B. 会借,但会问清楚原因 │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ C. 犹豫,需要考虑一下 │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ D. 不会借,关系没到那一步 │ │
│ └─────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
4.3.2 结果展示
┌─────────────────────────────────────────────────┐
│ │
│ 测试结果 │
│ │
│ ┌─────────────────┐ │
│ │ │ │
│ │ 62 │ │
│ │ │ │
│ │ 稳定关系 │ │
│ └─────────────────┘ │
│ │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ │
│ 维度分析 │
│ ┌─────────────────────────────────────────┐ │
│ │ 🤝 信任 ████████████████░░░░ 78 │ │
│ │ 💰 金钱 ████████████░░░░░░░░ 58 │ │
│ │ ⏰ 时间 ██████████████░░░░░░ 65 │ │
│ │ 🆘 危机 ████████████░░░░░░░░ 55 │ │
│ │ 🔐 秘密 ████████████████░░░░ 72 │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ⚠️ 风险提示 │
│ • 金钱关系存在隐患 │
│ • 危机应对能力不足 │
│ │
│ 💡 改善建议 │
│ • 建立更清晰的金钱边界 │
│ • 增加危机情况下的沟通 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 重新测试 │ │ 保存结果 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────┘
4.3.3 关系卡片
┌─────────────────────────────────────────────────┐
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ 💝 小明 │ │
│ │ │ │
│ │ 挚友 · 测试3次 │ │
│ │ │ │
│ │ 最新分数: 72 │ │
│ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │
│ │ │ │
│ │ 等级: 稳定 │ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ 开始测试 │ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ 👫 小红 │ │
│ │ │ │
│ │ 友谊 · 测试1次 │ │
│ │ │ │
│ │ 最新分数: 45 │ │
│ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │
│ │ │ │
│ │ 等级: 一般 │ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ 开始测试 │ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
│ │
│ + 添加关系 │
│ │
└─────────────────────────────────────────────────┘
4.3.4 历史记录
┌─────────────────────────────────────────────────┐
│ 测试历史 │
├─────────────────────────────────────────────────┤
│ │
│ 📊 趋势图表 │
│ ┌─────────────────────────────────────────┐ │
│ │ │ │
│ │ 80 ─ │ │
│ │ ╭───╮ │ │
│ │ 60 ─ ╰───╮ ╭─── │ │
│ │ ╰──────╯ │ │
│ │ 40 ─ │ │
│ │ │ │
│ │ 1月 2月 3月 4月 │ │
│ └─────────────────────────────────────────┘ │
│ │
│ 最近测试 │
│ ┌─────────────────────────────────────────┐ │
│ │ 💝 小明 · 72分 · 稳定 │ │
│ │ 2024-01-15 │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ 👫 小红 · 45分 · 一般 │ │
│ │ 2024-01-10 │ │
│ └─────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
五、核心功能实现
5.1 测试问题生成
List<TestQuestion> _generateQuestions(RelationType type) {
final questions = <TestQuestion>[];
final baseQuestions = _getBaseQuestions();
final typeQuestions = _getTypeSpecificQuestions(type);
questions.addAll(baseQuestions);
questions.addAll(typeQuestions);
questions.shuffle();
return questions.take(15).toList();
}
5.2 评分计算
TestResult _calculateResult(
Relationship relationship,
List<TestQuestion> questions,
List<int> answers,
) {
final dimensionScores = <String, int>{};
for (final dimension in TestDimension.values) {
final dimensionQuestions = questions
.where((q) => q.dimension == dimension)
.toList();
if (dimensionQuestions.isEmpty) continue;
var totalScore = 0;
for (int i = 0; i < questions.length; i++) {
if (questions[i].dimension == dimension) {
totalScore += questions[i].options[answers[i]].score;
}
}
dimensionScores[dimension.name] =
(totalScore / dimensionQuestions.length).round();
}
final totalScore = dimensionScores.values.reduce((a, b) => a + b) ~/
dimensionScores.length;
return TestResult(
id: DateTime.now().millisecondsSinceEpoch.toString(),
relationshipId: relationship.id,
testDate: DateTime.now(),
totalScore: totalScore,
dimensionScores: dimensionScores,
fragilityLevel: _getFragilityLevel(totalScore),
riskFactors: _analyzeRiskFactors(dimensionScores),
suggestions: _generateSuggestions(dimensionScores),
);
}
5.3 脆弱等级判断
String _getFragilityLevel(int score) {
if (score >= 80) return '坚固';
if (score >= 60) return '稳定';
if (score >= 40) return '一般';
if (score >= 20) return '脆弱';
return '危险';
}
5.4 风险因素分析
List<String> _analyzeRiskFactors(Map<String, int> scores) {
final risks = <String>[];
if (scores['trust'] != null && scores['trust']! < 50) {
risks.add('信任基础薄弱');
}
if (scores['money'] != null && scores['money']! < 50) {
risks.add('金钱关系存在隐患');
}
if (scores['crisis'] != null && scores['crisis']! < 50) {
risks.add('危机应对能力不足');
}
if (scores['boundary'] != null && scores['boundary']! < 50) {
risks.add('个人边界模糊');
}
return risks;
}
5.5 改善建议生成
List<String> _generateSuggestions(Map<String, int> scores) {
final suggestions = <String>[];
final lowDimensions = scores.entries
.where((e) => e.value < 60)
.map((e) => e.key)
.toList();
for (final dim in lowDimensions) {
switch (dim) {
case 'trust':
suggestions.add('增加真诚沟通,建立互信基础');
break;
case 'money':
suggestions.add('建立更清晰的金钱边界');
break;
case 'crisis':
suggestions.add('增加危机情况下的沟通');
break;
case 'boundary':
suggestions.add('学会适当表达自己的边界');
break;
}
}
return suggestions;
}
六、交互设计
6.1 测试流程
6.2 添加关系流程
七、运行说明
7.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
7.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_relationship_test.dart --web-port 8138
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_relationship_test.dart
# 运行到Windows
flutter run -d windows -t lib/main_relationship_test.dart
# 代码分析
flutter analyze lib/main_relationship_test.dart
八、总结
关系测试应用通过精心设计的测试场景和问题,帮助用户深入了解人际关系的脆弱程度。应用支持6种关系类型,8个测试维度,通过信任、金钱、时间、危机、秘密、价值观、边界、未来等多个角度全面评估关系的健康程度。
核心功能涵盖测试系统、关系管理、诊断报告三大模块。测试系统提供沉浸式的场景模拟体验;关系管理让用户可以追踪多段关系的变化;诊断报告提供专业的脆弱性分析和改善建议。
应用采用Material Design 3设计规范,以警示红为主色调,突出"脆弱性"主题。通过本应用,希望能够帮助用户更清醒地认识自己的人际关系,发现问题并及时改善,让关系更加坚固持久。
更多推荐


所有评论(0)