Flutter 框架跨平台鸿蒙开发 - 社区闲置循环

社区闲置循环应用


欢迎加入开源鸿蒙跨平台社区:

https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

1.1 应用简介

社区闲置循环是一款生活服务类应用,致力于社区内物品交换赠送、邻里互助,让闲置物品流动起来,实现环保又实惠的生活方式。通过平台,居民可以发布闲置物品、寻求邻里帮助,构建温馨互助的社区生态。

应用核心理念:让闲置流动起来,邻里互助,共建绿色社区。

在消费主义盛行的今天,每个家庭都有大量闲置物品。社区闲置循环平台让这些物品重新焕发价值,既减少资源浪费,又增进邻里感情,实现环保与实惠的双赢。

1.2 核心功能

功能模块 功能描述 实现方式
闲置发布 发布闲置物品信息 表单输入
物品浏览 浏览社区闲置物品 列表展示
分类筛选 按类型筛选物品 分类标签
邻里互助 发布和响应互助请求 请求列表
交易记录 查看历史交易记录 列表展示
个人中心 管理个人信息和发布 个人页面

1.3 物品分类

序号 分类 Emoji 描述
1 家具 🪑 桌椅沙发柜子等
2 电器 📺 家电数码产品
3 衣物 👕 服装鞋帽配饰
4 书籍 📚 图书杂志教材
5 玩具 🧸 儿童玩具益智
6 厨具 🍳 厨房用品餐具
7 运动 运动健身器材
8 其他 📦 其他闲置物品

1.4 发布类型

类型 Emoji 描述 颜色
赠送 🎁 免费赠送给邻居 绿色
交换 🔄 用闲置换闲置 蓝色
借用 🤝 临时借给邻居 橙色

1.5 物品状态

状态 Emoji 描述 颜色
可用 物品可领取/交换 绿色
已预约 📌 已被他人预约 橙色
已完成 🎉 交易已完成 灰色

1.6 互助类型

类型 Emoji 描述
借工具 🔧 借用工具
宠物照看 🐕 帮忙照看宠物
植物浇水 🌱 帮忙浇花
代收快递 📦 帮忙收快递
其他帮助 🤝 其他互助

1.7 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 setState -
导航控制 TabController -
目标平台 鸿蒙OS / Web API 21+

二、项目结构

复制代码
lib/
├── main_community_exchange.dart    # 应用主入口(~950行)
│   ├── CommunityExchangeApp        # 根应用组件
│   ├── ItemCategory                # 物品分类枚举
│   ├── ItemType                    # 发布类型枚举
│   ├── ItemStatus                  # 物品状态枚举
│   ├── HelpType                    # 互助类型枚举
│   ├── ExchangeItem                # 闲置物品模型
│   ├── HelpRequest                 # 互助请求模型
│   ├── Transaction                 # 交易记录模型
│   └── CommunityExchangeHomePage   # 主页面

三、数据模型

3.1 物品分类枚举 (ItemCategory)

dart 复制代码
enum ItemCategory {
  furniture('家具', '🪑', '桌椅沙发柜子等'),
  electronics('电器', '📺', '家电数码产品'),
  clothing('衣物', '👕', '服装鞋帽配饰'),
  books('书籍', '📚', '图书杂志教材'),
  toys('玩具', '🧸', '儿童玩具益智'),
  kitchen('厨具', '🍳', '厨房用品餐具'),
  sports('运动', '⚽', '运动健身器材'),
  other('其他', '📦', '其他闲置物品');

  final String label;       // 分类名称
  final String icon;        // 代表图标
  final String description; // 分类描述
}

3.2 发布类型枚举 (ItemType)

dart 复制代码
enum ItemType {
  give('赠送', '🎁', '免费赠送给邻居', Color(0xFF4CAF50)),
  exchange('交换', '🔄', '用闲置换闲置', Color(0xFF2196F3)),
  borrow('借用', '🤝', '临时借给邻居', Color(0xFFFF9800));

  final String label;       // 类型名称
  final String icon;        // 代表图标
  final String description; // 类型描述
  final Color color;        // 主题颜色
}

3.3 闲置物品模型 (ExchangeItem)

dart 复制代码
class ExchangeItem {
  final String id;              // 唯一标识
  final String title;           // 物品名称
  final String description;     // 物品描述
  final ItemCategory category;  // 物品分类
  final ItemType type;          // 发布类型
  final ItemStatus status;      // 物品状态
  final String ownerName;       // 发布者名称
  final String ownerAvatar;     // 发布者头像
  final String community;       // 所属社区
  final double distance;        // 距离(km)
  final DateTime createdAt;     // 发布时间
  final List<String> images;    // 图片列表
  final int viewCount;          // 浏览次数
  final int likeCount;          // 收藏次数
  final String? exchangeWish;   // 交换意愿
}

3.4 互助请求模型 (HelpRequest)

dart 复制代码
class HelpRequest {
  final String id;              // 唯一标识
  final String title;           // 请求标题
  final HelpType type;          // 互助类型
  final String description;     // 详细描述
  final String requesterName;   // 请求者名称
  final String requesterAvatar; // 请求者头像
  final String community;       // 所属社区
  final DateTime createdAt;     // 发布时间
  final DateTime? deadline;     // 截止时间
  final bool isUrgent;          // 是否紧急
  final int helperCount;        // 可帮忙人数
}

3.5 交易记录模型 (Transaction)

dart 复制代码
class Transaction {
  final String id;              // 唯一标识
  final ExchangeItem item;      // 交易物品
  final String fromUser;        // 转出方
  final String toUser;          // 接收方
  final DateTime completedAt;   // 完成时间
  final String? review;         // 评价内容
}

3.6 数据流转图


发布闲置
选择分类
选择类型
填写信息
发布成功
他人浏览
感兴趣?
联系/申请
线下交易
完成确认
记录交易


四、核心功能实现

4.1 发布闲置物品

dart 复制代码
void _publishItem() {
  if (_titleController.text.isEmpty) return;

  setState(() {
    _items.insert(
      0,
      ExchangeItem(
        id: DateTime.now().millisecondsSinceEpoch.toString(),
        title: _titleController.text,
        description: _descController.text,
        category: _selectedCategory,
        type: _selectedType,
        status: ItemStatus.available,
        ownerName: '我',
        ownerAvatar: '😊',
        community: '阳光花园',
        distance: 0.0,
        createdAt: DateTime.now(),
        images: [],
        exchangeWish: _wishController.text.isEmpty ? null : _wishController.text,
      ),
    );
  });

  // 清空输入
  _titleController.clear();
  _descController.clear();
  _wishController.clear();
}

4.2 物品详情展示

dart 复制代码
void _showItemDetail(ExchangeItem item) {
  showModalBottomSheet(
    context: context,
    builder: (context) => Column(
      children: [
        // 物品图片
        Container(height: 200, child: ImageWidget()),
        // 物品信息
        Text(item.title),
        Text(item.description),
        // 交换意愿(如有)
        if (item.exchangeWish != null)
          Text('希望交换: ${item.exchangeWish}'),
        // 发布者信息
        Row(children: [
          CircleAvatar(child: Text(item.ownerAvatar)),
          Text(item.ownerName),
          Text('${item.distance}km'),
        ]),
        // 操作按钮
        Row(children: [
          OutlinedButton(child: Text('联系TA')),
          ElevatedButton(child: Text('我要领取')),
        ]),
      ],
    ),
  );
}

4.3 分类筛选

dart 复制代码
Widget _buildCategoryFilter() {
  return SingleChildScrollView(
    scrollDirection: Axis.horizontal,
    child: Row(
      children: [
        _buildCategoryChip('全部', '📦', true),
        ...ItemCategory.values.map((cat) => 
          _buildCategoryChip(cat.label, cat.icon, false)
        ),
      ],
    ),
  );
}

4.4 邻里互助功能

dart 复制代码
Widget _buildHelpCard(HelpRequest request) {
  return Container(
    child: Row(
      children: [
        // 互助类型图标
        Container(child: Text(request.type.icon)),
        // 请求信息
        Column(
          children: [
            Text(request.title),
            Text(request.description),
            // 紧急标记
            if (request.isUrgent) Text('急'),
          ],
        ),
        // 帮忙按钮
        ElevatedButton(
          onPressed: () => _helpRequest(request),
          child: Text('帮忙'),
        ),
      ],
    ),
  );
}

五、环保价值分析

5.1 环保效益

环保效益
资源节约
减少新品生产
延长物品寿命
降低资源消耗
碳减排
减少运输排放
降低生产排放
循环利用减排
垃圾减量
减少废弃物品
降低填埋压力
促进循环经济

5.2 环保指标计算

指标 计算方式 单位
减碳量 物品重量 × 系数 kg CO₂
节约资源 物品价值 × 比例
延长寿命 原寿命 × 延长比例

5.3 社区价值

价值维度 描述
经济价值 免费获取闲置物品,节省开支
社交价值 增进邻里交流,构建社区关系
环保价值 减少浪费,促进资源循环
教育价值 培养环保意识,传递公益理念

六、UI设计

6.1 色彩系统

应用以绿色为主色调,象征环保与生机:

颜色类型 色值 用途
背景渐变1 #1B5E20 深绿
背景渐变2 #2E7D32 中绿
背景渐变3 #388E3C 浅绿
主色调 #43A047 绿色
强调色 #66BB6A 浅绿
文字主色 #FFFFFF 白色

6.2 类型配色

类型 颜色 色值 意象
赠送 绿色 #4CAF50 无偿分享
交换 蓝色 #2196F3 公平交换
借用 橙色 #FF9800 临时借用

6.3 页面结构

复制代码
┌─────────────────────────────────────┐
│  ♻️ 社区闲置循环              🔍   │  ← 标题栏
│  让闲置流动起来,环保又实惠         │
├─────────────────────────────────────┤
│  [闲置物品] [邻里互助] [交易记录] [我的]│
├─────────────────────────────────────┤
│  [📦全部] [🪑家具] [📺电器] [👕衣物]...│  ← 分类筛选
├─────────────────────────────────────┤
│  [🎁赠送] [🔄交换] [🤝借用]        │  ← 类型筛选
├─────────────────────────────────────┤
│  ┌─────────────────────────────┐  │
│  │ 🧸 九成新儿童自行车  [🎁赠送]│  │
│  │ 孩子长大了,自行车闲置...   │  ← 物品卡片
│  │ 👩王阿姨 · 阳光花园 · 0.3km │  │
│  └─────────────────────────────┘  │
│  ┌─────────────────────────────┐  │
│  │ 📚 全套考研资料      [🔄交换]│  │
│  │ 2024年考研全套资料...       │  │
│  │ 👨小李 · 翠湖小区 · 0.8km   │  │
│  └─────────────────────────────┘  │
├─────────────────────────────────────┤
│            [+] 发布                 │  ← 浮动按钮
└─────────────────────────────────────┘

6.4 发布页面结构

复制代码
┌─────────────────────────────────────┐
│  发布闲置                      ✕   │
├─────────────────────────────────────┤
│  物品名称                           │
│  ┌─────────────────────────────┐  │
│  │ 九成新儿童自行车             │  ← 输入框
│  └─────────────────────────────┘  │
│  物品描述                           │
│  ┌─────────────────────────────┐  │
│  │ 孩子长大了,自行车闲置...    │  │
│  │                             │  │
│  └─────────────────────────────┘  │
├─────────────────────────────────────┤
│  物品分类                           │
│  [🪑家具] [📺电器] [👕衣物] ...    │  ← 分类选择
├─────────────────────────────────────┤
│  发布类型                           │
│  [🎁赠送] [🔄交换] [🤝借用]        │  ← 类型选择
├─────────────────────────────────────┤
│  希望交换什么(交换时填写)         │
│  ┌─────────────────────────────┐  │
│  │ 编程类书籍                   │  │
│  └─────────────────────────────┘  │
├─────────────────────────────────────┤
│          [ 发布 ]                   │  ← 发布按钮
└─────────────────────────────────────┘

6.5 交互设计

交互元素 触发方式 响应行为
物品卡片 点击 显示物品详情
分类标签 点击 筛选分类
发布按钮 点击 打开发布弹窗
联系TA 点击 联系发布者
我要领取 点击 申请领取物品
帮忙按钮 点击 响应互助请求

七、状态管理

7.1 状态分类

状态类型 状态名称 说明
物品列表 _items 所有闲置物品
互助列表 _helpRequests 互助请求列表
交易记录 _transactions 历史交易记录
选中分类 _selectedCategory 当前选择的分类
选中类型 _selectedType 当前选择的类型
输入控制器 _titleController 物品名称输入
输入控制器 _descController 物品描述输入
输入控制器 _wishController 交换意愿输入

7.2 状态流转

初始化
选择分类/类型
显示结果
点击物品
返回
点击发布
发布成功
浏览列表
筛选
物品详情
发布物品

7.3 交易流程图

浏览者 应用 发布者 浏览者 应用 发布者 发布闲置物品 显示物品列表 点击物品详情 申请领取/交换 发送通知 同意交易 线下完成交易 确认完成 记录交易


八、邻里互助系统

8.1 互助类型详解

类型 适用场景 响应时间
借工具 临时需要工具 即时
宠物照看 出差/旅行期间 提前预约
植物浇水 长期外出 提前预约
代收快递 不在家时 即时
其他帮助 其他互助需求 视情况

8.2 互助流程




发布互助请求
是否紧急?
标记紧急
普通发布
优先展示
邻居看到请求
愿意帮忙?
点击帮忙
联系确认
完成互助
感谢评价

8.3 互助积分系统

行为 积分 说明
发布闲置 +5 分享闲置物品
成功交易 +10 完成一次流转
响应互助 +15 帮助邻居
获得帮助 +5 感谢邻居
收到好评 +20 获得认可

九、性能优化

9.1 渲染优化

优化点 实现方式 效果
列表渲染 ListView 按需渲染
Tab切换 TabController 平滑切换
状态更新 setState局部 减少重绘
图片加载 占位图 避免闪烁

9.2 内存管理

dart 复制代码
@override
void dispose() {
  _tabController.dispose();
  _titleController.dispose();
  _descController.dispose();
  _wishController.dispose();
  super.dispose();
}

9.3 性能指标

指标 目标值 实测值
列表滚动 60fps 60fps
页面切换 < 300ms 待测试
内存占用 < 50MB 待测试
启动时间 < 2s 待测试

十、常见问题

10.1 问题排查

问题 原因 解决方案
物品不显示 列表为空 检查数据加载
发布失败 输入为空 检查必填字段
筛选无效 状态未更新 检查setState
Tab不切换 控制器错误 检查TabController

10.2 调试技巧

dart 复制代码
// 打印物品列表
debugPrint('Items: ${_items.length}');
debugPrint('Available: ${_items.where((i) => i.status == ItemStatus.available).length}');

// 打印互助请求
debugPrint('Help requests: ${_helpRequests.length}');
debugPrint('Urgent: ${_helpRequests.where((h) => h.isUrgent).length}');

十一、运行说明

11.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

11.2 运行命令

bash 复制代码
# 查看可用设备
flutter devices

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_community_exchange.dart

# 运行到Web服务器
flutter run -d web-server -t lib/main_community_exchange.dart --web-port 8135

# 运行到Windows
flutter run -d windows -t lib/main_community_exchange.dart

# 代码分析
flutter analyze lib/main_community_exchange.dart

十二、扩展建议

12.1 功能扩展

功能 优先级 实现思路
真实定位 集成定位服务
即时通讯 添加聊天功能
图片上传 支持拍照/相册
评价系统 交易双方互评
积分商城 积分兑换奖励
社区活动 组织线下活动

12.2 设计扩展

方向 描述
主题切换 多种配色主题
动画效果 物品发布动画
音效反馈 操作音效
夜间模式 深色主题

12.3 技术扩展

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 2024-03-24 物品发布 物品浏览 邻里互助 即时通讯 图片上传 评价系统 积分系统 社区活动 积分商城 V1.0 基础版本 V1.1 增强版本 V1.2 社交版本 社区闲置循环应用开发计划


十三、总结

社区闲置循环应用通过创新的"闲置流转"概念,让社区内的闲置物品重新焕发价值。应用核心亮点包括:

13.1 核心特色

  1. 8种物品分类:全面覆盖各类闲置物品
  2. 3种发布类型:赠送、交换、借用满足不同需求
  3. 邻里互助:构建温馨互助的社区生态
  4. 交易记录:完整记录闲置流转历史
  5. 环保理念:促进资源循环,减少浪费

13.2 技术亮点

  • 枚举类型设计:分类、类型、状态使用枚举,代码清晰
  • 状态管理:清晰的页面状态流转
  • 分类筛选:灵活的分类和类型筛选
  • 详情展示:丰富的物品信息展示
  • 互助系统:完整的邻里互助功能

13.3 社会价值

社区闲置循环不仅是一个物品交换平台,更是一个构建社区关系、促进环保生活的平台。通过闲置物品的流转,减少资源浪费,增进邻里感情,实现经济效益与社会效益的双赢。

让闲置流动起来,邻里互助,共建绿色社区!


愿每个闲置都能找到新主人 ♻️


相关推荐
chenbin___2 小时前
在鸿蒙手机上,measure 和 measureInWindow 返回的 y / pageY 在滑动组件后值不变问题
华为·智能手机·harmonyos
浮芷.3 小时前
Flutter 框架跨平台鸿蒙开发 - 家庭健康监测云应用
科技·flutter·华为·harmonyos·鸿蒙
世人万千丶4 小时前
Flutter 框架跨平台鸿蒙开发 - 宠物语言翻译器应用
学习·flutter·华为·开源·harmonyos·鸿蒙
见山是山-见水是水4 小时前
Flutter 框架跨平台鸿蒙开发 - NPC模拟器
flutter·华为·harmonyos
提子拌饭1334 小时前
番茄时间管理:鸿蒙Flutter 实现的高效时间管理工具
android·flutter·华为·架构·开源·harmonyos·鸿蒙
浮芷.4 小时前
Flutter 框架跨平台鸿蒙开发 - 科技预言应用
科技·flutter·华为·harmonyos
李李李勃谦4 小时前
Flutter 框架跨平台鸿蒙开发 - 小众景点发现
flutter·华为·harmonyos
见山是山-见水是水4 小时前
Flutter 框架跨平台鸿蒙开发 - 邻里互助服务平台
flutter·华为·harmonyos
提子拌饭1334 小时前
3D 旋转卡片:鸿蒙Flutter 实现的交互式 3D 卡片效果
flutter·华为·harmonyos·鸿蒙