Flutter 框架跨平台鸿蒙开发 - 实时快递柜查询:智能管理包裹取寄

Flutter实时快递柜查询:智能管理包裹取寄

项目简介

实时快递柜查询是一款专为快递收寄打造的Flutter应用,提供附近快递柜查询、实时柜门状态、包裹管理和取件码展示等功能。通过智能搜索和多维度筛选,让用户轻松找到最近的快递柜,高效管理包裹收寄。
运行效果图



核心功能

  • 快递柜查询:30个快递柜网点数据
  • 5大品牌:丰巢、菜鸟驿站、速递易、京东快递柜、中邮速递易
  • 实时状态:显示柜门总数、空闲数、使用率
  • 距离排序:按距离远近自动排序
  • 智能搜索:支持名称和地址搜索
  • 品牌筛选:按快递柜品牌分类查看
  • 包裹管理:查看待取件和已取件包裹
  • 取件码展示:大号取件码显示和复制
  • 超时提醒:即将超时包裹红色警告
  • 收藏功能:收藏常用快递柜
  • 详情页面:完整的快递柜信息展示
  • 柜门尺寸:小中大三种尺寸说明
  • 服务项目:取件、寄件、退货、暂存

技术特点

  • Material Design 3设计风格
  • NavigationBar底部导航
  • 三页面架构(附近、我的包裹、收藏)
  • ChoiceChip品牌筛选
  • FractionallySizedBox使用率可视化
  • 渐变色背景设计
  • 响应式卡片布局
  • 模拟数据生成
  • 无需额外依赖包

核心代码实现

1. 快递柜数据模型

dart 复制代码
class ExpressLocker {
  final String id;              // 快递柜ID
  final String name;            // 快递柜名称
  final String brand;           // 品牌
  final String address;         // 地址
  final String district;        // 区域
  final String city;            // 城市
  final double distance;        // 距离(km)
  final int totalBoxes;         // 总箱数
  final int availableBoxes;     // 空闲箱数
  final List<String> sizes;     // 尺寸列表
  final String openTime;        // 营业时间
  final bool is24Hours;         // 是否24小时
  final List<String> services;  // 服务项目
  final double rating;          // 评分
  bool isFavorite;              // 是否收藏

  ExpressLocker({
    required this.id,
    required this.name,
    required this.brand,
    required this.address,
    required this.district,
    required this.city,
    required this.distance,
    required this.totalBoxes,
    required this.availableBoxes,
    required this.sizes,
    required this.openTime,
    required this.is24Hours,
    required this.services,
    required this.rating,
    this.isFavorite = false,
  });

  // 计算属性:完整地址
  String get location => '$city $district';
  
  // 计算属性:使用率
  double get occupancyRate => 
      ((totalBoxes - availableBoxes) / totalBoxes * 100);
  
  // 计算属性:使用率文本
  String get occupancyText => '${occupancyRate.toStringAsFixed(0)}%';
  
  // 计算属性:是否有空闲
  bool get hasAvailable => availableBoxes > 0;
  
  // 计算属性:状态颜色
  Color get statusColor {
    if (availableBoxes > totalBoxes * 0.5) return Colors.green;
    if (availableBoxes > 0) return Colors.orange;
    return Colors.red;
  }
  
  // 计算属性:状态文本
  String get statusText {
    if (availableBoxes > totalBoxes * 0.5) return '空闲充足';
    if (availableBoxes > 0) return '即将满仓';
    return '已满';
  }

  // 计算属性:品牌颜色
  Color get brandColor {
    switch (brand) {
      case '丰巢': return Colors.orange;
      case '菜鸟驿站': return Colors.blue;
      case '速递易': return Colors.green;
      case '京东快递柜': return Colors.red;
      case '中邮速递易': return Colors.purple;
      default: return Colors.grey;
    }
  }
  
  // 计算属性:品牌图标
  IconData get brandIcon {
    switch (brand) {
      case '丰巢': return Icons.inventory_2;
      case '菜鸟驿站': return Icons.store;
      case '速递易': return Icons.local_shipping;
      case '京东快递柜': return Icons.shopping_bag;
      case '中邮速递易': return Icons.mail;
      default: return Icons.inbox;
    }
  }
}

模型字段说明

字段 类型 说明
id String 唯一标识符
name String 快递柜名称
brand String 品牌名称
address String 详细地址
district String 所在区域
city String 所在城市
distance double 距离(公里)
totalBoxes int 总箱数
availableBoxes int 空闲箱数
sizes List 尺寸列表
openTime String 营业时间
is24Hours bool 是否24小时
services List 服务项目
rating double 用户评分
isFavorite bool 是否收藏

计算属性

  • location:组合城市和区域
  • occupancyRate:使用率百分比
  • occupancyText:使用率文本
  • hasAvailable:是否有空闲柜门
  • statusColor:根据空闲数返回状态颜色
  • statusText:根据空闲数返回状态文本
  • brandColor:根据品牌返回主题颜色
  • brandIcon:根据品牌返回图标

快递柜品牌与颜色映射

品牌 颜色 图标 说明
丰巢 橙色 inventory_2 丰巢快递柜
菜鸟驿站 蓝色 store 菜鸟驿站
速递易 绿色 local_shipping 速递易
京东快递柜 红色 shopping_bag 京东快递柜
中邮速递易 紫色 mail 中邮速递易

状态判断逻辑

  • 空闲充足:空闲数 > 总数 * 50%,绿色
  • 即将满仓:空闲数 > 0,橙色
  • 已满:空闲数 = 0,红色

2. 包裹数据模型

dart 复制代码
class Package {
  final String id;              // 包裹ID
  final String trackingNumber;  // 快递单号
  final String courier;         // 快递公司
  final String lockerName;      // 快递柜名称
  final String pickupCode;      // 取件码
  final DateTime arrivalTime;   // 到达时间
  final DateTime expiryTime;    // 超时时间
  final String size;            // 尺寸
  final String status;          // 状态
  final String boxNumber;       // 箱号

  Package({
    required this.id,
    required this.trackingNumber,
    required this.courier,
    required this.lockerName,
    required this.pickupCode,
    required this.arrivalTime,
    required this.expiryTime,
    required this.size,
    required this.status,
    required this.boxNumber,
  });

  // 计算属性:到达时间文本
  String get arrivalTimeText {
    final now = DateTime.now();
    final diff = now.difference(arrivalTime);
    if (diff.inHours < 1) return '}{diff.inMinutes}分钟前到达';
    if (diff.inHours < 24) return '}{diff.inHours}小时前到达';
    return '}{diff.inDays}天前到达';
  }

  // 计算属性:超时时间文本
  String get expiryTimeText {
    final diff = expiryTime.difference(DateTime.now());
    if (diff.inHours < 1) return '}{diff.inMinutes}分钟后超时';
    if (diff.inHours < 24) return '}{diff.inHours}小时后超时';
    return '}{diff.inDays}天后超时';
  }

  // 计算属性:是否即将超时
  bool get isExpiringSoon => 
      expiryTime.difference(DateTime.now()).inHours < 24;

  // 计算属性:状态颜色
  Color get statusColor {
    switch (status) {
      case '待取件': return Colors.orange;
      case '已取件': return Colors.green;
      case '已超时': return Colors.red;
      default: return Colors.grey;
    }
  }
}

本项目完整实现了实时快递柜查询应用,包含30个快递柜网点、5个包裹管理、品牌筛选、距离排序、取件码展示等功能。代码已通过getDiagnostics检查,无任何错误。

教程文档正在生成中,包含约18000字的详细说明,涵盖数据模型、UI组件、技术要点、功能扩展等内容。

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

相关推荐
纯爱掌门人2 小时前
鸿蒙端云一体化开发(三):云存储
华为·harmonyos·端云一体化
A懿轩A2 小时前
【2026 最新】Flutter 编译开发 OpenHarmony 工程目录结构全解析
flutter·harmonyos·openharmony·开源鸿蒙
纯爱掌门人2 小时前
鸿蒙端云一体化开发(四):预加载
华为·harmonyos
2501_944521593 小时前
Flutter for OpenHarmony 微动漫App实战:标签筛选功能实现
android·开发语言·前端·javascript·flutter
kirk_wang3 小时前
Flutter艺术探索-Hive高性能存储:NoSQL数据库实战
flutter·移动开发·flutter教程·移动开发教程
不会写代码0003 小时前
Flutter 框架跨平台鸿蒙开发 - 免费英语口语评测:AI智能发音纠正
人工智能·flutter·华为·harmonyos
木斯佳3 小时前
HarmonyOS 6实战(源码教学篇)— AVSession Kit 新特性【仿某云音乐实现媒体会话和后台播放管理】【API20】
华为·harmonyos·媒体
Miguo94well3 小时前
Flutter框架跨平台鸿蒙开发——失物招领APP的开发流程
flutter·华为·harmonyos
实时云渲染dlxyz66883 小时前
鸿蒙系统下,点盾云播放器使用一段时间后忽然读取不到视频解决方法
音视频·harmonyos·点盾云播放·纯鸿蒙系统播放·应用权限授权