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

相关推荐
爱网络爱Linux16 小时前
华为 HCIA-Datacom考试版本升级 V2.0!2026年7月起考新版
华为·hcie·hcip·h12-811·华为数通认证·hcia datacom·微信公众号:厦门微思网络
Justin在掘金16 小时前
Flutter Riverpod 状态管理深入分析
flutter
Justin在掘金16 小时前
Flutter BLoC 状态管理框架深入分析
flutter
weixin_4434785116 小时前
flutter组件学习之Cupertino 组件(iOS风格)
学习·flutter·ios
弓.长.17 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-masked-view — 遮罩视图组件
react native·react.js·harmonyos
大雷神17 小时前
HarmonyOS APP<玩转React>开源教程十四:进度管理服务
前端·react.js·开源·harmonyos
Swift社区17 小时前
鸿蒙 App 的数据流设计
华为·harmonyos
国医中兴18 小时前
Flutter 三方库 superclass 的鸿蒙化适配指南 - 支持原生高性能类构造、属性代理与深层元数据解析实战
flutter·harmonyos·鸿蒙·openharmony
Swift社区18 小时前
Flutter 迁移鸿蒙 ArkUI 的真实成本
flutter·华为·harmonyos
互联网散修18 小时前
零基础鸿蒙应用开发第七节:流程控制之分支语句
harmonyos·流程控制·鸿蒙零基础入门