Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day7 最终闭环篇|真机全流程演示+毕设答辩总结+源码梳理+扩展方向+项目交付(补全可运行代码版

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

<!-- Schema.org 结构化数据 -->
<script type="application/ld+json">
{
  "@context":"https://schema.org",
  "type":"BlogPosting",
  "headline":"Flutter+开源鸿蒙实战 城市智慧停车管理系统Day7 最终闭环 真机演示+毕设总结+源码梳理+可运行代码+功能扩展",
  "author":{"type":"Person","name":"鸿蒙跨端开发者"},
  "publisher":{"type":"Organization","name":"开源鸿蒙技术社区"},
  "datePublished":"2026-05-12",
  "description":"商业级非校园实战项目Day7完结篇,补全最终调优代码、全局初始化、异常捕获、打包配置、真机演示核心代码,全套可直接运行,毕设答辩直接使用",
  "keywords":"Flutter,开源鸿蒙,OpenHarmony,智慧停车,最终代码,全局异常,真机部署,毕设项目"
}
</script>

一、前言

今天是城市智慧停车管理系统 Day7 最终完结篇,前面6天我们完成了业务开发、组件封装、代码重构、Bug修复,今天补全最终可运行代码,包含全局初始化、异常捕获、最终交互优化、打包配置、核心方法汇总,同时给出毕设总结、源码梳理、扩展方向,所有代码可直接复制运行,适配鸿蒙手机/平板。
在这里插入图片描述

二、版块1:项目最终全局初始化 & 异常捕获(main.dart 最终完整版)

文字讲解

统一初始化屏幕适配、高德隐私协议、GetX、全局异常捕获、缓存初始化,防止闪退,是真机稳定运行的核心。

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'controller/main_controller.dart';
import 'core/route/route_config.dart';
import 'core/style/app_style.dart';
import 'core/utils/sp_util.dart';
import 'controller/theme_controller.dart';
import 'pages/main_page.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 全局异常捕获,防止闪退
  FlutterError.onError = (FlutterErrorDetails details) {
    debugPrint("全局异常:${details.exception}");
  };

  // 初始化本地缓存工具
  await SpUtil.init();

  // 初始化高德地图隐私协议
  await AMapFlutterLocation.updatePrivacyShow(true, true);
  await AMapFlutterLocation.updatePrivacyAgree(true);

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(375, 812),
      minTextAdapt: true,
      builder: (context, child) {
        return GetBuilder<ThemeController>(
          init: ThemeController(),
          builder: (themeCtrl) {
            return GetMaterialApp(
              title: "城市智慧停车",
              debugShowCheckedModeBanner: false,
              theme: themeCtrl.isDarkMode.value
                  ? ThemeData.dark().copyWith(primaryColor: AppStyle.primaryColor)
                  : ThemeData.light().copyWith(primaryColor: AppStyle.primaryColor),
              home: const MainPage(),
              getPages: getRoutes(),
            );
          },
        );
      },
    );
  }
}

三、版块2:最终细节调优核心代码(动画/空状态/交互)

2.1 统一空状态组件(全局最终版)

// widgets/common_empty.dart
class CommonEmpty extends StatelessWidget {
  final IconData icon;
  final String text;
  const CommonEmpty({super.key, required this.icon, required this.text});

  
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Icon(icon, size: 60.w, color: Colors.grey[300]),
          SizedBox(height: 15.h),
          Text(text, style: TextStyle(fontSize: 14.sp, color: Colors.grey[500])),
        ],
      ),
    );
  }
}

2.2 停车计时平滑更新 & 超时最终逻辑

// controller/park_controller.dart
void startTimer(ParkModel park, int slotId) {
  parkingHour.value = 0;
  isParking.value = true;
  timer = Timer.periodic(const Duration(hours: 1), (t) {
    parkingHour.value++;
    // 单日24小时封顶
    if (parkingHour.value > 24) parkingHour.value = 24;
    fee.value = calcParkingFee(parkingHour.value, authCtrl.isVip.value);
    // 20小时触发超时提醒
    if (parkingHour.value >= 20) {
      showOverTimeDialog(fee.value);
    }
  });
}

// 最终版阶梯计费算法
double calcParkingFee(int hour, bool isVip) {
  double base;
  if (hour <= 2) base = 4;
  else if (hour <= 8) base = 8;
  else base = 15;
  return isVip ? double.parse((base * 0.8).toStringAsFixed(2)) : base;
}

2.3 多端适配工具类最终版

// utils/adapt_util.dart
class AdaptUtil {
  static bool isTablet(BuildContext context) {
    return MediaQuery.of(context).size.width > 600;
  }

  static int getCrossCount(BuildContext context) {
    return isTablet(context) ? 6 : 4;
  }

  static double getPadding(BuildContext context) {
    return isTablet(context) ? 20.w : 15.w;
  }
}

四、版块3:订单缴费 & 状态流转最终代码(毕设核心业务)

3.1 订单生成最终逻辑

// park_controller.dart
void stopParking(ParkModel park, int slotId) {
  if (!isParking.value) return;
  timer?.cancel();
  isParking.value = false;

  String orderNo = DateFormat("yyyyMMddHHmmss").format(DateTime.now())
      + Random().nextInt(99).toString();
  bool vip = authCtrl.isVip.value;

  ParkOrderModel order = ParkOrderModel(
    orderNo: orderNo,
    parkName: park.name,
    slotId: slotId,
    parkHour: parkingHour.value,
    fee: fee.value,
    isVip: vip,
    status: OrderStatus.unpaid,
    startTime: DateTime.now(),
  );
  orderList.add(order);
  filterOrderList.assignAll(orderList);
  Get.toNamed(RoutePath.order);
}

3.2 支付完成状态更新

void payOrder(ParkOrderModel order) {
  int idx = orderList.indexWhere((e) => e.orderNo == order.orderNo);
  if (idx == -1) return;
  orderList[idx] = order.copyWith(status: OrderStatus.completed);
  Get.back();
  ToastUtil.show("缴费成功!");
}

五、版块4:隐私协议 & 登录记住我最终代码

4.1 隐私协议首次启动校验

// main_page.dart

void onReady() {
  super.onReady();
  checkPrivacy();
}

Future<void> checkPrivacy() async {
  bool agree = SpUtil.getBool("privacy_agree") ?? false;
  if (!agree) {
    Get.dialog(
      AlertDialog(
        title: const Text("用户隐私协议"),
        content: const Text("本应用需要定位、网络权限用于停车导航与计费"),
        actions: [
          TextButton(onPressed: () => exit(0), child: const Text("拒绝")),
          TextButton(onPressed: () async {
            await SpUtil.setBool("privacy_agree", true);
            Get.back();
          }, child: const Text("同意"))
        ],
      ),
    );
  }
}

4.2 记住登录完整逻辑

// auth_controller.dart
Future<void> saveLogin(String user, String pwd, bool remember) async {
  if (remember) {
    await SpUtil.setString("login_user", user);
    await SpUtil.setString("login_pwd", pwd);
  } else {
    await SpUtil.remove("login_user");
    await SpUtil.remove("login_pwd");
  }
}

Future<void> autoLogin() async {
  String user = SpUtil.getString("login_user");
  String pwd = SpUtil.getString("login_pwd");
  if (user.isNotEmpty && pwd.isNotEmpty) {
    login(UserModel(name: user, isVip: false));
  }
}

六、版块5:鸿蒙打包最终配置代码

5.1 pubspec.yaml 打包权限 & 图标配置

flutter:
  assets:
    - images/park_icon.png
    - images/logo.png
  permissions:
    - ACCESS_FINE_LOCATION
    - ACCESS_NETWORK_STATE
    - INTERNET
    - READ_EXTERNAL_STORAGE
    - WRITE_EXTERNAL_STORAGE

5.2 ohos/module.json5 签名配置

"signingConfig": {
  "path": "./signature/debug.p12",
  "keyAlias": "debug",
  "storePassword": "123456",
  "keyPassword": "123456"
}

七、版块6:全局样式常量最终完整版(app_style.dart)

// core/style/app_style.dart
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

class AppStyle {
  static const Color primaryColor = Color(0xFF2F54EB);
  static const Color borderColor = Color(0xFFE5E7EB);
  static const double shadowElevation = 2;
  static final double radius = 8.r;
  static final double padding = 15.w;
  static final double spacingS = 8.h;
  static final double spacingL = 15.h;
}

八、版块7:毕设答辩完整总结(可直接复制)

7.1 项目概述

本项目为城市智慧停车管理系统,基于 Flutter + 开源鸿蒙开发,面向城市商圈、小区、市政停车场,实现地图定位、车场查询、车位预约、一键导航、停车计时、阶梯计费、在线缴费、订单管理、会员权益、意见反馈、系统设置、深浅色主题完整业务闭环,一套代码适配鸿蒙手机、平板、折叠屏,无校园同质化场景,可直接商用落地。
在这里插入图片描述

7.2 核心技术栈

  • 框架:Flutter
  • 状态管理:GetX
  • 地图:高德地图 Flutter SDK
  • 存储:SharedPreferences
  • 权限:permission_handler
  • 适配:flutter_screenutil
  • 网络:dio

7.3 项目架构

采用企业级分层架构:core全局核心 → controller业务逻辑 → models数据模型 → pages页面层 → widgets通用组件 → utils工具类,严格UI与逻辑分离,高内聚低耦合。

7.4 核心亮点

  1. 真实阶梯计费算法,区分普通/会员,单日封顶;
  2. 完整停车业务闭环,对标真实商用APP;
  3. 鸿蒙多端深度适配,手机平板自适应;
  4. 全局组件封装,代码规范、可维护性强;
  5. 隐私合规、异常捕获、缓存持久化,稳定性高。
    在这里插入图片描述

九、版块8:源码结构+关键代码位置(答辩用)

lib/
├── core/         # 全局样式、路由、工具
├── controller/   # 停车/登录/反馈/主题逻辑
├── models/       # 车场、车位、订单、反馈模型
├── pages/        # 首页/详情/订单/个人/反馈/设置
├── widgets/      # 按钮/输入框/弹窗/空页面/加载
├── utils/        # 权限/缓存/适配/计费工具
└── main.dart     # 全局入口+异常捕获+初始化
  • 计费算法:utils/fee_util.dart
  • 地图定位:controller/park_controller.dart
  • 订单缴费:park_controller.dart
  • 全局组件:widgets/

十、版块9:高级扩展方向(答辩加分)

  1. 对接后端:Java/Node.js,云端存储车场订单,真实联网项目;
  2. 真实支付:集成鸿蒙/微信/支付宝支付SDK;
  3. 消息推送:鸿蒙系统推送,超时提醒、预约到期通知;
  4. 硬件联动:对接智能车位硬件,远程开锁、自动更新车位状态。

十一、Day7 最终总结

今天补全了整套项目最终可运行代码,完成全局初始化、异常捕获、计费逻辑、订单流转、隐私登录、打包配置,项目从功能可用升级为稳定、规范、可真机部署、可直接毕设答辩的商业级项目。
7天完整实现:架构搭建 → 第三方库集成 → 地图定位 → 预约停车 → 计时计费 → 订单缴费 → 反馈设置 → 真机交付,全程无校园场景,技术硬核、业务完整。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐