Flutter 框架跨平台鸿蒙开发 - 反向社交应用
运行效果图反向社交应用是一款颠覆传统社交理念的创新产品。不同于常规社交应用"加好友"的思路,本应用采用"减法社交"的哲学——通过拉黑、屏蔽那些消耗你能量的人,最终留下真正值得深交的朋友。这就像淘金一样,筛去沙砾,留下真金。应用以深灰色为主色调,象征筛选过程的理性与冷静。涵盖陌生人管理、拉黑决策、真朋友守护、关系演变追踪四大模块。用户可以从庞大的社交网络中,通过科学的评估体系和直观的数据分析,逐步筛
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
反向社交应用是一款颠覆传统社交理念的创新产品。不同于常规社交应用"加好友"的思路,本应用采用"减法社交"的哲学——通过拉黑、屏蔽那些消耗你能量的人,最终留下真正值得深交的朋友。这就像淘金一样,筛去沙砾,留下真金。
应用以深灰色为主色调,象征筛选过程的理性与冷静。涵盖陌生人管理、拉黑决策、真朋友守护、关系演变追踪四大模块。用户可以从庞大的社交网络中,通过科学的评估体系和直观的数据分析,逐步筛选出真正值得投入时间和情感的朋友。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 陌生人列表 | 展示所有社交关系 | 分类列表 + 搜索 |
| 拉黑决策 | 评估并拉黑不合适的人 | 决策弹窗 + 原因选择 |
| 真朋友列表 | 展示筛选后的朋友 | 精选列表 + 标签管理 |
| 关系演变 | 记录关系变化历程 | 时间轴展示 |
| 统计分析 | 分析社交质量 | 图表可视化 |
| 能量评估 | 评估关系能量值 | 算法计算 |
1.3 关系类型定义
| 序号 | 类型名称 | Emoji | 主题色 | 描述 |
|---|---|---|---|---|
| 1 | 陌生人 | 👤 | #9E9E9E | 毫无交集的路人 |
| 2 | 泛泛之交 | 👋 | #BDBDBD | 点头之交,无深交 |
| 3 | 普通朋友 | 🤝 | #78909C | 偶尔联系,关系一般 |
| 4 | 好朋友 | 💫 | #4DD0E1 | 经常互动,值得深交 |
| 5 | 挚友 | ⭐ | #00BCD4 | 真心相待,值得守护 |
| 6 | 灵魂伴侣 | 💎 | #00ACC1 | 志同道合,灵魂契合 |
1.4 拉黑原因分类
| 序号 | 原因类型 | Emoji | 描述 |
|---|---|---|---|
| 1 | 负能量 | ⚡ | 总是抱怨,消耗能量 |
| 2 | 虚伪 | 🎭 | 表里不一,难以信任 |
| 3 | 利益至上 | 💰 | 只在有求于你时出现 |
| 4 | 三观不合 | 🔀 | 价值观冲突严重 |
| 5 | 情感绑架 | 🔗 | 道德绑架,情感勒索 |
| 6 | 不尊重 | 🚫 | 缺乏基本尊重 |
| 7 | 背叛 | 💔 | 出卖信任,背叛友谊 |
| 8 | 消失型 | 👻 | 需要时消失,不需要时出现 |
1.5 能量评估维度
| 维度 | 权重 | 评估标准 |
|---|---|---|
| 正向影响 | 30% | 是否带来积极能量 |
| 真诚度 | 25% | 是否真心相待 |
| 可靠性 | 20% | 是否值得信赖 |
| 互动质量 | 15% | 交流是否有价值 |
| 时间投入 | 10% | 是否愿意花时间 |
1.6 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 动画控制 | AnimationController | - |
| 图表绘制 | CustomPainter | - |
| 状态管理 | setState | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.7 项目结构
lib/
└── main_reverse_social.dart
├── ReverseSocialApp # 应用入口
├── RelationType # 关系类型枚举
├── BlockReason # 拉黑原因枚举
├── SocialPerson # 社交人物模型
├── RelationHistory # 关系历史记录
├── ReverseSocialHomePage # 主页面(底部导航)
├── _buildStrangersPage # 陌生人页面
├── _buildTrueFriendsPage # 真朋友页面
├── _buildHistoryPage # 历史记录页面
├── _buildStatsPage # 统计分析页面
└── EnergyRadarPainter # 能量雷达图绘制器
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 拉黑决策流程
三、核心模块设计
3.1 数据模型设计
3.1.1 关系类型枚举 (RelationType)
enum RelationType {
stranger('陌生人', '👤', Color(0xFF9E9E9E), '毫无交集的路人', 1),
acquaintance('泛泛之交', '👋', Color(0xFFBDBDBD), '点头之交,无深交', 2),
friend('普通朋友', '🤝', Color(0xFF78909C), '偶尔联系,关系一般', 3),
goodFriend('好朋友', '💫', Color(0xFF4DD0E1), '经常互动,值得深交', 4),
bestFriend('挚友', '⭐', Color(0xFF00BCD4), '真心相待,值得守护', 5),
soulmate('灵魂伴侣', '💎', Color(0xFF00ACC1), '志同道合,灵魂契合', 6);
final String label;
final String emoji;
final Color color;
final String description;
final int level;
}
3.1.2 拉黑原因枚举 (BlockReason)
enum BlockReason {
negativeEnergy('负能量', '⚡', '总是抱怨,消耗能量'),
hypocritical('虚伪', '🎭', '表里不一,难以信任'),
profitFirst('利益至上', '💰', '只在有求于你时出现'),
valuesClash('三观不合', '🔀', '价值观冲突严重'),
emotionalBlackmail('情感绑架', '🔗', '道德绑架,情感勒索'),
disrespect('不尊重', '🚫', '缺乏基本尊重'),
betrayal('背叛', '💔', '出卖信任,背叛友谊'),
ghost('消失型', '👻', '需要时消失,不需要时出现');
final String label;
final String emoji;
final String description;
}
3.1.3 社交人物模型 (SocialPerson)
class SocialPerson {
final String id;
final String name;
final String? avatar;
final RelationType relationType;
final double energyScore;
final List<BlockReason> blockReasons;
final DateTime metDate;
final DateTime? blockDate;
final bool isBlocked;
final String? notes;
final List<String> tags;
double get energyPercentage => (energyScore * 100).clamp(0, 100);
}
3.1.4 关系历史记录 (RelationHistory)
class RelationHistory {
final String id;
final String personId;
final RelationType fromType;
final RelationType toType;
final DateTime changeDate;
final String? reason;
}
3.1.5 关系类型分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 陌生人页面结构
3.2.3 拉黑决策弹窗结构
3.2.4 真朋友页面结构
3.3 能量评估算法
3.4 关系演变追踪
四、UI设计规范
4.1 配色方案
应用以深灰色为主色调,象征筛选过程的理性与冷静:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #37474F (Blue Grey) | 导航、强调元素 |
| 背景色 | #ECEFF1 | 页面背景 |
| 卡片背景 | #FFFFFF | 人物卡片 |
| 陌生人 | #9E9E9E | 陌生人标识 |
| 泛泛之交 | #BDBDBD | 泛泛之交标识 |
| 普通朋友 | #78909C | 普通朋友标识 |
| 好朋友 | #4DD0E1 | 好朋友标识 |
| 挚友 | #00BCD4 | 挚友标识 |
| 灵魂伴侣 | #00ACC1 | 灵魂伴侣标识 |
| 拉黑红 | #E53935 | 拉黑按钮 |
4.2 能量配色
| 能量等级 | 色值 | 视觉效果 |
|---|---|---|
| 高能量 | #00C853 | 生机绿色 |
| 正能量 | #64DD17 | 明亮绿色 |
| 中性 | #FFD600 | 温暖黄色 |
| 负能量 | #FF6D00 | 警示橙色 |
| 严重负能量 | #D50000 | 危险红色 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 人物姓名 | 16px | Medium | #000000 |
| 关系类型 | 14px | Regular | 类型色 |
| 能量值 | 20px | Bold | 能量色 |
| 拉黑原因 | 12px | Regular | #757575 |
| 时间显示 | 12px | Regular | #9E9E9E |
4.4 组件规范
4.4.1 人物卡片布局
┌─────────────────────────────────────────────┐
│ ┌────┐ ┌────┐ │
│ │ 👤 │ 张三 │ 🤝 │ │
│ │ │ 普通朋友 │ │ │
│ └────┘ 能量值: 65% └────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ 能量雷达图 │ │
│ │ 正向影响 ████████░░ 80% │ │
│ │ 真诚度 ██████░░░░ 60% │ │
│ │ 可靠性 ███████░░░ 70% │ │
│ │ 互动质量 ██████░░░░ 60% │ │
│ │ 时间投入 █████░░░░░ 50% │ │
│ └──────────────────────────────────────┘ │
│ │
│ [🚫 拉黑] │
└─────────────────────────────────────────────┘
4.4.2 拉黑决策弹窗
┌─────────────────────────────────────────────┐
│ 拉黑确认 │
├─────────────────────────────────────────────┤
│ │
│ ┌────┐ │
│ │ 👤 │ 张三 │
│ └────┘ 普通朋友 · 能量值 65% │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ 能量雷达图 │ │
│ │ ┌─────┐ │ │
│ │ ╱ ╲ │ │
│ │ │ ● │ │ │
│ │ ╲ ╱ │ │
│ │ └─────┘ │ │
│ └──────────────────────────────────────┘ │
│ │
│ 选择拉黑原因(可多选): │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ ⚡ │ │ 🎭 │ │ 💰 │ │
│ │负能量│ │ 虚伪 │ │利益至上│ │
│ └──────┘ └──────┘ └──────┘ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ 🔀 │ │ 🔗 │ │ 🚫 │ │
│ │三观不合│ │情感绑架│ │ 不尊重 │ │
│ └──────┘ └──────┘ └──────┘ │
│ │
│ [取消] [确认拉黑] │
└─────────────────────────────────────────────┘
4.4.3 真朋友卡片
┌─────────────────────────────────────────────┐
│ ┌────┐ ┌────┐ │
│ │ 💎 │ 李四 │ ⭐ │ │
│ │ │ 灵魂伴侣 │ │ │
│ └────┘ 能量值: 95% └────┘ │
│ │
│ 标签: #志同道合 #真心相待 #灵魂契合 │
│ │
│ 最近互动: 2小时前 │
│ 互动频率: 每天多次 │
│ │
│ [💝 互动记录] │
└─────────────────────────────────────────────┘
4.4.4 时间轴布局
┌─────────────────────────────────────────────┐
│ 关系演变历程 │
├─────────────────────────────────────────────┤
│ │
│ 2024-01-15 │
│ ● 张三 从 陌生人 升级为 泛泛之交 │
│ 原因: 开始有交集 │
│ │
│ 2024-02-20 │
│ ● 张三 从 泛泛之交 升级为 普通朋友 │
│ 原因: 偶尔联系 │
│ │
│ 2024-03-10 │
│ ● 张三 被拉黑 │
│ 原因: 负能量、虚伪 │
│ │
└─────────────────────────────────────────────┘
五、核心功能实现
5.1 能量评估计算
double _calculateEnergyScore(SocialPerson person) {
final positiveImpact = _evaluatePositiveImpact(person);
final sincerity = _evaluateSincerity(person);
final reliability = _evaluateReliability(person);
final interactionQuality = _evaluateInteractionQuality(person);
final timeInvestment = _evaluateTimeInvestment(person);
return (positiveImpact * 0.30 +
sincerity * 0.25 +
reliability * 0.20 +
interactionQuality * 0.15 +
timeInvestment * 0.10)
.clamp(0.0, 1.0);
}
5.2 拉黑功能实现
void _blockPerson(SocialPerson person, List<BlockReason> reasons) {
final history = RelationHistory(
id: DateTime.now().millisecondsSinceEpoch.toString(),
personId: person.id,
fromType: person.relationType,
toType: person.relationType,
changeDate: DateTime.now(),
reason: reasons.map((r) => r.label).join('、'),
);
setState(() {
final index = _persons.indexWhere((p) => p.id == person.id);
if (index != -1) {
_persons[index] = person.copyWith(
isBlocked: true,
blockDate: DateTime.now(),
blockReasons: reasons,
);
_blockedPersons.add(_persons[index]);
_persons.removeAt(index);
_histories.insert(0, history);
}
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('已将 ${person.name} 移入黑名单'),
backgroundColor: Colors.red,
),
);
}
5.3 恢复功能实现
void _restorePerson(SocialPerson person) {
final history = RelationHistory(
id: DateTime.now().millisecondsSinceEpoch.toString(),
personId: person.id,
fromType: person.relationType,
toType: person.relationType,
changeDate: DateTime.now(),
reason: '恢复关系',
);
setState(() {
final index = _blockedPersons.indexWhere((p) => p.id == person.id);
if (index != -1) {
_blockedPersons[index] = person.copyWith(
isBlocked: false,
blockDate: null,
blockReasons: [],
);
_persons.add(_blockedPersons[index]);
_blockedPersons.removeAt(index);
_histories.insert(0, history);
}
});
}
5.4 能量雷达图绘制
class EnergyRadarPainter extends CustomPainter {
final Map<String, double> dimensions;
final Color color;
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 2);
final radius = min(size.width, size.height) / 2 - 20;
final labels = dimensions.keys.toList();
final values = dimensions.values.toList();
final angleStep = 2 * pi / labels.length;
final path = Path();
for (var i = 0; i < labels.length; i++) {
final angle = i * angleStep - pi / 2;
final value = values[i];
final x = center.dx + cos(angle) * radius * value;
final y = center.dy + sin(angle) * radius * value;
if (i == 0) {
path.moveTo(x, y);
} else {
path.lineTo(x, y);
}
}
path.close();
final paint = Paint()
..color = color.withValues(alpha: 0.3)
..style = PaintingStyle.fill;
canvas.drawPath(path, paint);
final borderPaint = Paint()
..color = color
..style = PaintingStyle.stroke
..strokeWidth = 2;
canvas.drawPath(path, borderPaint);
}
}
5.5 统计计算实现
Map<String, dynamic> _getStatistics() {
final typeCounts = <RelationType, int>{};
for (var type in RelationType.values) {
typeCounts[type] = _persons.where((p) => p.relationType == type).length;
}
final reasonCounts = <BlockReason, int>{};
for (var reason in BlockReason.values) {
reasonCounts[reason] = _blockedPersons
.where((p) => p.blockReasons.contains(reason))
.length;
}
final avgEnergy = _persons.isEmpty
? 0.0
: _persons.map((p) => p.energyScore).reduce((a, b) => a + b) /
_persons.length;
return {
'totalCount': _persons.length + _blockedPersons.length,
'activeCount': _persons.length,
'blockedCount': _blockedPersons.length,
'typeCounts': typeCounts,
'reasonCounts': reasonCounts,
'avgEnergy': avgEnergy,
};
}
六、交互设计
6.1 拉黑决策流程
6.2 关系升级流程
6.3 恢复关系流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 AI智能建议
智能分析功能:
- 基于互动数据预测关系走向
- 自动识别负能量人物
- 推荐值得深交的朋友
- 生成社交质量报告
7.2.2 社交日历
时间管理功能:
- 记录重要互动时间
- 提醒维护关系
- 分析互动频率
- 规划社交活动
7.2.3 关系网络图
可视化功能:
- 展示关系网络结构
- 分析社交圈子
- 识别关键人物
- 发现潜在问题
八、注意事项
8.1 开发注意事项
-
数据持久化:人物数据需要本地存储,支持数据导出
-
能量评估:评估算法需要综合考虑多个维度,避免单一指标
-
历史记录:所有关系变化都需要记录,便于追溯
-
状态管理:拉黑和恢复操作需要同步更新多个列表
-
用户体验:拉黑操作需要二次确认,避免误操作
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 能量值异常 | 评估维度数据缺失 | 设置默认值或提示用户 |
| 拉黑后无法恢复 | 历史记录丢失 | 确保历史记录完整 |
| 统计数据不准 | 数据未及时更新 | 每次操作后刷新统计 |
| 雷达图显示错误 | 维度数据错误 | 检查数据范围0-1 |
8.3 设计理念
💎 反向社交理念 💎
在这个信息爆炸的时代,
我们被无数"朋友"包围,
却常常感到孤独。
反向社交告诉我们:
真正的友谊不在于数量,
而在于质量。
通过筛选和淘汰,
我们不是在失去朋友,
而是在发现真正的朋友。
拉黑不是结束,
而是新生活的开始。
筛去沙砾,留下真金
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_reverse_social.dart --web-port 8120
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_reverse_social.dart
# 运行到Windows
flutter run -d windows -t lib/main_reverse_social.dart
# 代码分析
flutter analyze lib/main_reverse_social.dart
十、总结
反向社交应用通过陌生人管理、拉黑决策、真朋友守护、关系演变追踪四大模块,为用户提供了一个独特的社交筛选平台。应用采用"减法社交"的哲学,帮助用户从庞大的社交网络中筛选出真正值得深交的朋友。
核心功能涵盖能量评估、拉黑决策、关系演变、统计分析四大模块。能量评估系统通过五个维度综合计算人物能量值,为用户提供科学的决策依据;拉黑决策支持多原因选择和二次确认,确保操作的准确性;关系演变记录完整保留所有变化历史,便于追溯和分析;统计分析提供能量雷达图和拉黑原因分析,帮助用户了解社交质量。
应用采用Material Design 3设计规范,以深灰色为主色调,象征筛选过程的理性与冷静。通过本应用,希望能够帮助用户重新审视自己的社交关系,筛去那些消耗能量的人,留下真正值得珍惜的朋友。
反向社交——筛去沙砾,留下真金
更多推荐




所有评论(0)