
回复
一个使用Flutter开发的鸿蒙原生应用,提供便捷的快递查询服务,支持物流跟踪、短信通知和电话联系等功能。
随着电子商务的快速发展,快递服务已成为人们日常生活中不可或缺的一部分。然而,用户经常需要在多个平台之间切换来查询不同快递公司的物流信息,体验不够便捷。
本项目旨在解决这一痛点,通过整合多家快递公司的查询接口,提供统一的查询入口,让用户能够便捷地追踪任何快递包裹的物流状态。同时,项目特别针对鸿蒙系统进行了原生适配,为鸿蒙用户提供流畅的使用体验。
作为一个开源项目,我们希望能够帮助更多的开发者了解Flutter与鸿蒙系统的结合开发,推动跨平台应用在鸿蒙生态中的发展。
本项目基于Flutter跨平台框架开发,支持多种操作系统和设备:
应用集成了短信发送功能,可以将快递物流信息通过短信分享给他人:
// 短信发送功能实现
Future<void> sendSms(BuildContext context, {String? trackingInfo}) async {
String defaultNumber = '17752170152';
String message;
if (trackingInfo != null && trackingInfo.isNotEmpty) {
// 发送物流信息
message = '您的快递最新状态: $trackingInfo';
} else {
// 发送应用介绍
message = '快递查询助手是一款便捷的快递查询工具...';
}
// 显示对话框让用户输入电话号码
await showSmsDialog(context, defaultNumber, message);
}
应用提供了一键拨打客服电话的功能:
// 电话拨打功能实现
Future<void> _callNumber(BuildContext context) async {
const String number = '17752170152';
try {
// 使用FlutterPhoneDirectCaller拨号
bool? result = await FlutterPhoneDirectCaller.callNumber(number);
if (result != true) {
// 如果直接拨号失败,显示提示
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('无法拨打电话,请手动拨打: 17752170152')),
);
}
}
} catch (e) {
// 错误处理
}
}
## 安装方式
### 通用安装
```bash
# 克隆仓库
git clone git@gitcode.com:nutpi/flutter_express_tracker.git
# 进入项目目录
cd flutter_express_tracker
# 安装依赖
flutter pub get
# 运行应用
flutter run
# 运行Web版本
flutter run -d chrome
# 运行macOS版本
flutter run -d macos
# 运行Linux版本
flutter run -d linux
# 运行Windows版本
flutter run -d windows
# 构建Web版本
flutter build web
# 构建macOS应用
flutter build macos
# 构建Linux应用
flutter build linux
# 构建Windows应用
flutter build windows
欢迎提交问题和功能请求,或直接提交代码贡献。请确保遵循项目的代码风格和提交规范。
MIT License
作者:坚果派 公众号:nutpi 电话:17752170152 官网: https://www.nutpi.net/
应用实现了本地历史记录管理功能,方便用户查看和管理已查询的快递信息:
// 历史记录管理实现
class TrackingHistoryService {
final _prefs = SharedPreferences.getInstance();
static const _historyKey = 'tracking_history';
// 保存查询记录
Future<void> saveTrackingHistory(TrackingHistory history) async {
final prefs = await _prefs;
List<String> histories = prefs.getStringList(_historyKey) ?? [];
histories.insert(0, jsonEncode(history.toJson()));
await prefs.setStringList(_historyKey, histories);
}
// 获取历史记录
Future<List<TrackingHistory>> getTrackingHistories() async {
final prefs = await _prefs;
List<String> histories = prefs.getStringList(_historyKey) ?? [];
return histories
.map((e) => TrackingHistory.fromJson(jsonDecode(e)))
.toList();
}
}
为确保应用的流畅运行,我们采取了以下优化措施:
项目采用清晰的分层架构设计:
lib/
├── main.dart # 应用入口
├── models/ # 数据模型
│ ├── tracking_model.dart
│ └── tracking_history_model.dart
├── pages/ # 页面组件
│ ├── tracking_page.dart
│ └── history_page.dart
├── services/ # 业务逻辑
│ ├── tracking_service.dart
│ └── history_service.dart
└── utils/ # 工具类
└── http_util.dart
项目使用了以下主要依赖:
dependencies:
# 网络请求
http: ^1.1.0
# 状态管理
provider: ^6.1.2
# 本地存储
shared_preferences: ^2.2.2
# UI组件
flutter_animate: ^4.5.0
fl_chart: ^0.66.2
为支持鸿蒙系统,我们进行了以下适配:
原生API适配:
UI适配:
性能优化:
为什么无法识别快递公司?
如何处理查询失败?
短信发送失败怎么办?
收到"设备不支持发送短信"错误怎么办?