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

相关推荐
maaath5 小时前
【maaath】Flutter for OpenHarmony 跨平台工程集成密码加密能力
flutter·华为·harmonyos
yeziyfx5 小时前
Flutter 纯色矩形
flutter
liulian09165 小时前
Flutter for OpenHarmony 混合开发实践:用户反馈功能的实现与适配
flutter·华为·学习方法·harmonyos
Hello__77776 小时前
开源鸿蒙 Flutter 实战|文章分类标签功能全流程实现
flutter·开源·harmonyos
xiaoyan20157 小时前
2026爆肝!Flutter3.41纯手撸微信聊天APP原生应用
android·flutter·dart
GitCode官方7 小时前
一声唤醒 万物响应|AtomGit 首款开源鸿蒙 AI 硬件「小鸿」发布会圆满落幕 定义智能交互新入口
人工智能·开源·harmonyos
程序员老刘8 小时前
当全网都在喊“程序员要被AI取代了”,Flutter给了另一种答案
flutter·ai编程·客户端
国医中兴8 小时前
Flutter 三方库 nhost_graphql_adapter 的鸿蒙化适配指南 - 云端数据实时对齐、GraphQL 架构实战、鸿蒙级全栈交互专家
flutter·harmonyos·graphql
nashane8 小时前
HarmonyOS 6学习:RCP远场通信流式返回实战——告别“一次性”数据阻塞
学习·华为·harmonyos
李游Leo8 小时前
别把耗时任务都丢进 async:HarmonyOS 里 TaskPool 和 Worker 的边界感
harmonyos