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

一、项目概述

运行效果图

image-20260407225455046

image-20260407225503551

image-20260407225508625

image-20260407225513259

image-20260407225517820

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 整体架构图

Data Layer

Presentation Layer

主页面
ReverseSocialHomePage

陌生人页面

真朋友页面

历史记录

统计分析

关系列表

能量评估

拉黑决策

精选朋友

标签管理

互动记录

时间轴

演变轨迹

数据概览

能量雷达

拉黑分析

SocialPerson
社交人物

RelationType
关系类型

BlockReason
拉黑原因

RelationHistory
关系历史

2.2 类图设计

has

has many

manages

tracks

renders

references

ReverseSocialApp

+Widget build()

«enumeration»

RelationType

+String label

+String emoji

+Color color

+String description

+int level

+stranger()

+acquaintance()

+friend()

+goodFriend()

+bestFriend()

+soulmate()

«enumeration»

BlockReason

+String label

+String emoji

+String description

+negativeEnergy()

+hypocritical()

+profitFirst()

+valuesClash()

+emotionalBlackmail()

+disrespect()

+betrayal()

+ghost()

SocialPerson

+String id

+String name

+String? avatar

+RelationType relationType

+double energyScore

+List<BlockReason> blockReasons

+DateTime metDate

+DateTime? blockDate

+bool isBlocked

+String? notes

+List<String> tags

RelationHistory

+String id

+String personId

+RelationType fromType

+RelationType toType

+DateTime changeDate

+String? reason

ReverseSocialHomePage

-int _selectedIndex

-List<SocialPerson> _persons

-List<SocialPerson> _blockedPersons

-List<RelationHistory> _histories

+Widget build()

-_blockPerson()

-_restorePerson()

-_getStatistics()

EnergyRadarPainter

+Map<String,double> dimensions

+void paint()

+bool shouldRepaint()

2.3 页面导航流程

陌生人

真朋友

历史

统计

应用启动

陌生人页面

底部导航

关系列表

精选列表

演变记录

数据分析

查看详情

能量评估

拉黑决策

确认拉黑?

选择原因

返回列表

移入黑名单

查看朋友

互动记录

标签管理

时间轴

查看详情

能量雷达

拉黑分析

2.4 拉黑决策流程

数据层 决策弹窗 陌生人页面 用户 数据层 决策弹窗 陌生人页面 用户 alt [确认拉黑] [取消操作] 点击拉黑按钮 显示决策界面 展示能量评估 选择拉黑原因 确认决策 更新人物状态 记录历史 刷新列表 显示成功提示 关闭弹窗

三、核心模块设计

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 关系类型分布
35% 28% 21% 11% 4% 1% 关系类型分布示例 陌生人 泛泛之交 普通朋友 好朋友 挚友 灵魂伴侣

3.2 页面结构设计

3.2.1 主页面布局

ReverseSocialHomePage

IndexedStack

陌生人页面

真朋友页面

历史记录

统计分析

NavigationBar

陌生人 Tab

真朋友 Tab

历史 Tab

统计 Tab

3.2.2 陌生人页面结构

陌生人页面

SliverAppBar

搜索栏

分类筛选

人物列表

标题

统计概览

全部

陌生人

泛泛之交

普通朋友

人物卡片

头像

姓名

关系类型

能量值

拉黑按钮

3.2.3 拉黑决策弹窗结构

拉黑决策弹窗

人物信息

能量评估

原因选择

确认按钮

头像

姓名

当前关系

能量雷达图

各维度分数

负能量

虚伪

利益至上

三观不合

情感绑架

不尊重

背叛

消失型

3.2.4 真朋友页面结构

真朋友页面

精选列表

标签管理

互动记录

好朋友

挚友

灵魂伴侣

创建标签

标签筛选

最近互动

互动频率

3.3 能量评估算法

>=0.8

>=0.6

>=0.4

>=0.2

<0.2

获取人物数据

计算各维度分数

正向影响 30%

真诚度 25%

可靠性 20%

互动质量 15%

时间投入 10%

加权求和

归一化到0-1

生成能量值

能量等级

高能量

正能量

中性

负能量

严重负能量

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 关系升级流程

>=0.8

>=0.6

>=0.4

<0.4

查看人物详情

能量评估

能量值判断

建议升级为好朋友

维持当前关系

建议观察

建议拉黑

用户确认

更新关系类型

记录历史

6.3 恢复关系流程

点击人物

查看拉黑原因

点击恢复

确认操作

添加恢复记录

返回列表

查看黑名单

选择人物

查看详情

确认恢复

移出黑名单

记录历史


七、扩展功能规划

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 陌生人管理 拉黑功能 统计分析 能量评估优化 AI建议系统 数据导出 社交日历 关系提醒 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 反向社交应用开发计划

7.2 功能扩展建议

7.2.1 AI智能建议

智能分析功能:

  • 基于互动数据预测关系走向
  • 自动识别负能量人物
  • 推荐值得深交的朋友
  • 生成社交质量报告
7.2.2 社交日历

时间管理功能:

  • 记录重要互动时间
  • 提醒维护关系
  • 分析互动频率
  • 规划社交活动
7.2.3 关系网络图

可视化功能:

  • 展示关系网络结构
  • 分析社交圈子
  • 识别关键人物
  • 发现潜在问题

八、注意事项

8.1 开发注意事项

  1. 数据持久化:人物数据需要本地存储,支持数据导出

  2. 能量评估:评估算法需要综合考虑多个维度,避免单一指标

  3. 历史记录:所有关系变化都需要记录,便于追溯

  4. 状态管理:拉黑和恢复操作需要同步更新多个列表

  5. 用户体验:拉黑操作需要二次确认,避免误操作

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设计规范,以深灰色为主色调,象征筛选过程的理性与冷静。通过本应用,希望能够帮助用户重新审视自己的社交关系,筛去那些消耗能量的人,留下真正值得珍惜的朋友。

反向社交——筛去沙砾,留下真金


Logo

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

更多推荐