Flutter 框架跨平台鸿蒙开发 - 车辆管理应用

车辆管理应用


欢迎加入开源鸿蒙跨平台社区:

https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图



1.1 应用简介

车辆管理是一款专注于个人车辆信息维护与费用追踪的移动应用,为车主提供便捷、全面的车辆管理体验。随着私家车保有量的持续增长,车辆日常维护与费用管理已成为车主的刚需。本应用帮助用户实现多车辆集中管理,支持保养记录追踪、加油消费统计、费用分析等功能,让车辆管理更加系统化、数据化。

应用支持多车辆信息管理,每辆车可独立记录品牌、型号、车牌、里程等信息。保养记录功能帮助用户追踪每次保养详情,并智能提醒下次保养时间。加油记录功能详细记录每次加油信息,便于油耗分析。费用统计模块提供多维度费用分析,让用车成本一目了然。

1.2 核心功能

功能模块 功能描述 实现方式
车辆管理 添加、编辑、删除车辆信息 ListView + Card
车辆详情 查看车辆完整信息与记录 ModalBottomSheet
保养记录 记录保养详情与下次提醒 ListView + Card
加油记录 记录加油量、单价、总价 ListView + Card
费用统计 多维度费用分析展示 图表 + 进度条
保养提醒 智能计算保养到期时间 日期差值计算

1.3 车辆属性

属性 类型 说明
车辆ID String 唯一标识
品牌 String 车辆品牌
型号 String 车辆型号
车牌号 String 车牌号码
年份 int 购买年份
燃料类型 FuelType 汽油/柴油/电动/混动
当前里程 int 车辆行驶里程
购买日期 DateTime 购车日期
购买价格 double 购车价格

1.4 燃料类型

类型 图标 颜色 说明
汽油 local_gas_station 红色 传统燃油车
柴油 local_gas_station 棕色 柴油动力车
电动 electric_car 绿色 纯电动汽车
混动 electric_car 蓝色 油电混合动力

1.5 保养类型

类型 图标 说明
机油更换 oil_barrel 发动机机油更换
轮胎换位 tire_repair 轮胎位置调换
刹车检查 disc_full 制动系统检查
空气滤芯 air 空气滤清器更换
冷却液 water_drop 冷却液更换
变速箱 settings 变速箱油更换
电瓶检查 battery_charging_full 蓄电池检测
年检 verified 车辆年检

1.6 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 setState -
日期处理 intl ^0.19.0
目标平台 鸿蒙OS API 21+

1.7 项目结构

复制代码
lib/
└── main_vehicle.dart
    ├── VehicleManagementApp      # 应用入口
    ├── FuelType                   # 燃料类型枚举
    ├── MaintenanceType            # 保养类型枚举
    ├── Vehicle                    # 车辆数据模型
    ├── MaintenanceRecord          # 保养记录模型
    ├── FuelRecord                 # 加油记录模型
    ├── ExpenseRecord              # 费用记录模型
    └── VehicleHomePage            # 主页面
        ├── _buildVehicleListPage()    # 车辆列表页
        ├── _buildMaintenancePage()    # 保养记录页
        ├── _buildFuelPage()           # 加油记录页
        ├── _buildStatisticsPage()     # 费用统计页
        ├── _buildVehicleCard()        # 车辆卡片
        ├── _buildMaintenanceCard()    # 保养卡片
        ├── _buildFuelCard()           # 加油卡片
        └── _showVehicleDetail()       # 车辆详情弹窗

二、系统架构

2.1 整体架构图

Business Logic
Presentation Layer
Data Layer
Vehicle

车辆模型
MaintenanceRecord

保养记录
FuelRecord

加油记录
ExpenseRecord

费用记录
FuelType

燃料类型
MaintenanceType

保养类型
主页面
车辆列表Tab
保养记录Tab
加油记录Tab
费用统计Tab
车辆详情弹窗
基本信息
保养历史
加油历史
车辆管理

增删改查
保养记录

添加/提醒
加油记录

添加/统计
费用分析

多维度统计

2.2 类图设计

contains
manages
manages
manages
manages
has
has
VehicleManagementApp
+Widget build()
<<enumeration>>
FuelType
gasoline
diesel
electric
hybrid
+String label
+IconData icon
+Color color
<<enumeration>>
MaintenanceType
oilChange
tireRotation
brakeCheck
airFilter
coolant
transmission
battery
inspection
+String label
+IconData icon
Vehicle
+String id
+String brand
+String model
+String plateNumber
+int year
+FuelType fuelType
+int currentMileage
+DateTime purchaseDate
+double purchasePrice
+String fullName
MaintenanceRecord
+String id
+String vehicleId
+MaintenanceType type
+DateTime date
+int mileage
+double cost
+String shop
+String notes
+DateTime nextDueDate
+int nextDueMileage
FuelRecord
+String id
+String vehicleId
+DateTime date
+int mileage
+double liters
+double pricePerLiter
+double totalCost
+bool isFullTank
+String station
+double efficiency
ExpenseRecord
+String id
+String vehicleId
+String category
+double amount
+DateTime date
+String description
VehicleHomePage
-List<Vehicle> _vehicles
-List<MaintenanceRecord> _maintenanceRecords
-List<FuelRecord> _fuelRecords
-List<ExpenseRecord> _expenseRecords
-int _selectedIndex
+Widget build()
-void _showAddVehicleDialog()
-void _deleteVehicle()
-void _showAddMaintenanceDialog()
-void _showAddFuelDialog()

2.3 数据流程图

管理车辆
添加保养
添加加油
查看统计
用户操作
操作类型
车辆增删改
创建保养记录
创建加油记录
计算费用汇总
更新车辆列表
更新保养列表
更新加油列表
更新统计图表
刷新界面

2.4 保养提醒流程

提醒计算 保养记录 保养页面 用户 提醒计算 保养记录 保养页面 用户 查看保养列表 获取所有记录 计算到期天数 nextDueDate - today 返回提醒状态 显示逾期/临近/正常状态


三、核心模块设计

3.1 数据模型设计

3.1.1 燃料类型枚举 (FuelType)
dart 复制代码
enum FuelType {
  gasoline('汽油', Icons.local_gas_station, Colors.red),
  diesel('柴油', Icons.local_gas_station, Colors.brown),
  electric('电动', Icons.electric_car, Colors.green),
  hybrid('混动', Icons.electric_car, Colors.blue);

  final String label;
  final IconData icon;
  final Color color;
  const FuelType(this.label, this.icon, this.color);
}
3.1.2 保养类型枚举 (MaintenanceType)
dart 复制代码
enum MaintenanceType {
  oilChange('机油更换', Icons.oil_barrel),
  tireRotation('轮胎换位', Icons.tire_repair),
  brakeCheck('刹车检查', Icons.disc_full),
  airFilter('空气滤芯', Icons.air),
  coolant('冷却液', Icons.water_drop),
  transmission('变速箱', Icons.settings),
  battery('电瓶检查', Icons.battery_charging_full),
  inspection('年检', Icons.verified);

  final String label;
  final IconData icon;
  const MaintenanceType(this.label, this.icon);
}
3.1.3 车辆模型 (Vehicle)
dart 复制代码
class Vehicle {
  final String id;                  // 唯一标识
  final String brand;               // 品牌
  final String model;               // 型号
  final String plateNumber;         // 车牌号
  final int year;                   // 年份
  final FuelType fuelType;          // 燃料类型
  final int currentMileage;         // 当前里程
  final DateTime purchaseDate;      // 购买日期
  final double purchasePrice;       // 购买价格
  final String? imageUrl;           // 图片URL
  final DateTime createdAt;         // 创建时间

  String get fullName => '$brand $model';
}
3.1.4 保养记录模型 (MaintenanceRecord)
dart 复制代码
class MaintenanceRecord {
  final String id;                  // 记录ID
  final String vehicleId;           // 车辆ID
  final MaintenanceType type;       // 保养类型
  final DateTime date;              // 保养日期
  final int mileage;                // 保养时里程
  final double cost;                // 费用
  final String? shop;               // 维修店
  final String? notes;              // 备注
  final DateTime nextDueDate;       // 下次保养日期
  final int? nextDueMileage;        // 下次保养里程
}
3.1.5 加油记录模型 (FuelRecord)
dart 复制代码
class FuelRecord {
  final String id;                  // 记录ID
  final String vehicleId;           // 车辆ID
  final DateTime date;              // 加油日期
  final int mileage;                // 加油时里程
  final double liters;              // 加油量(升)
  final double pricePerLiter;       // 单价(元/升)
  final double totalCost;           // 总费用
  final bool isFullTank;            // 是否满箱
  final String? station;            // 加油站

  double get efficiency => liters > 0 ? mileage / liters : 0;
}

3.2 保养提醒逻辑

3.2.1 提醒状态计算





获取保养记录
计算到期天数
daysUntilDue < 0?
已逾期状态
daysUntilDue < 30?
临近提醒状态
正常状态
红色标识
橙色标识
绿色标识

3.2.2 提醒状态实现
dart 复制代码
Widget _buildMaintenanceCard(MaintenanceRecord record) {
  final daysUntilDue = record.nextDueDate.difference(DateTime.now()).inDays;
  final isOverdue = daysUntilDue < 0;
  
  return Card(
    child: Column(
      children: [
        // ...保养信息
        Container(
          decoration: BoxDecoration(
            color: isOverdue
                ? Colors.red.withValues(alpha: 0.1)
                : daysUntilDue < 30
                    ? Colors.orange.withValues(alpha: 0.1)
                    : Colors.green.withValues(alpha: 0.1),
          ),
          child: Text(
            isOverdue
                ? '已逾期${-daysUntilDue}天'
                : daysUntilDue < 30
                    ? '还有$daysUntilDue天'
                    : DateFormat('yyyy-MM-dd').format(record.nextDueDate),
          ),
        ),
      ],
    ),
  );
}

3.3 费用统计逻辑

3.3.1 费用汇总流程

费用统计页面
计算保养费用
计算加油费用
计算其他费用
遍历保养记录
累加cost字段
遍历加油记录
累加totalCost字段
遍历费用记录
累加amount字段
总费用
分类统计
按车辆统计

3.3.2 费用计算实现
dart 复制代码
Widget _buildStatisticsPage() {
  final totalMaintenanceCost = _maintenanceRecords.fold<double>(
    0, (sum, r) => sum + r.cost
  );
  final totalFuelCost = _fuelRecords.fold<double>(
    0, (sum, r) => sum + r.totalCost
  );
  final totalOtherCost = _expenseRecords.fold<double>(
    0, (sum, r) => sum + r.amount
  );
  final totalCost = totalMaintenanceCost + totalFuelCost + totalOtherCost;

  // 分类统计
  final Map<String, double> categoryCosts = {};
  for (var record in _expenseRecords) {
    categoryCosts[record.category] = 
      (categoryCosts[record.category] ?? 0) + record.amount;
  }
  categoryCosts['保养'] = totalMaintenanceCost;
  categoryCosts['加油'] = totalFuelCost;
  
  // ...
}

3.4 页面结构设计

3.4.1 主页面布局

主页面
底部导航栏
IndexedStack
我的车辆
保养记录
加油记录
费用统计
车辆列表页
保养列表页
加油列表页
统计展示页

3.5 状态管理

3.5.1 核心状态变量
dart 复制代码
class _VehicleHomePageState extends State<VehicleHomePage> {
  int _selectedIndex = 0;                           // 当前Tab索引
  final List<Vehicle> _vehicles = [];               // 车辆列表
  final List<MaintenanceRecord> _maintenanceRecords = [];  // 保养记录
  final List<FuelRecord> _fuelRecords = [];         // 加油记录
  final List<ExpenseRecord> _expenseRecords = [];   // 费用记录
}

四、UI设计规范

4.1 配色方案

应用采用蓝色主题风格,体现专业与可靠:

颜色类型 色值 用途
主色 Blue AppBar、强调、按钮
保养 Blue 保养相关标识
加油 Red 加油相关标识
费用 Orange 费用相关标识
逾期 Red 逾期提醒
临近 Orange 临近提醒
正常 Green 正常状态

4.2 燃料类型颜色映射

燃料类型 颜色 说明
汽油 红色 传统燃油动力
柴油 棕色 柴油动力
电动 绿色 清洁能源
混动 蓝色 混合动力

4.3 组件规范

4.3.1 车辆卡片
复制代码
┌─────────────────────────────────────────────────────────────┐
│  ┌────┐  比亚迪 汉EV ⋮                                      │
│  │ 🚗 │  电动  京A12345                                     │
│  └────┘                                                     │
├─────────────────────────────────────────────────────────────┤
│     ⚡            🔧            ⛽                           │
│   15680           1            0                            │
│    公里          保养          加油                          │
└─────────────────────────────────────────────────────────────┘
4.3.2 保养卡片
复制代码
┌─────────────────────────────────────────────────────────────┐
│  ┌────┐  机油更换                               ¥580        │
│  │ 🔧 │  丰田 凯美瑞                                         │
│  └────┘                                                     │
│  📅 2024-02-20    ⚡ 40000公里                               │
│  🏪 丰田4S店                                                │
├─────────────────────────────────────────────────────────────┤
│  下次保养                              还有180天             │
└─────────────────────────────────────────────────────────────┘
4.3.3 加油卡片
复制代码
┌─────────────────────────────────────────────────────────────┐
│  ┌────┐  丰田 凯美瑞                           ¥342.3       │
│  │ ⛽ │  2024-03-15 14:30                                    │
│  └────┘                                                     │
│  加油量: 42.0L  单价: ¥8.15/L  里程: 45230km  [满箱]        │
│  📍 中石油加油站                                             │
└─────────────────────────────────────────────────────────────┘
4.3.4 费用统计卡片
复制代码
┌─────────────────────────────────────────────────────────────┐
│  总支出                                              ¥16,195│
│                                                             │
│  费用构成                                                   │
│  🔧 保养费用                                    ¥760        │
│  ⛽ 加油费用                                    ¥715        │
│  ⋯ 其他费用                                  ¥14,720        │
├─────────────────────────────────────────────────────────────┤
│  分类统计                                                   │
│  保险        ¥11,000  ████████████████████░░░░  68.0%      │
│  保养          ¥760   ██░░░░░░░░░░░░░░░░░░░░░░   4.7%      │
│  加油          ¥715   ██░░░░░░░░░░░░░░░░░░░░░░   4.4%      │
└─────────────────────────────────────────────────────────────┘

4.4 交互设计

4.4.1 操作方式
操作 手势 效果
查看车辆详情 点击卡片 弹出详情面板
添加车辆 点击+按钮 弹出添加表单
编辑车辆 点击⋮菜单 选择编辑
删除车辆 点击⋮菜单 确认删除
添加保养 点击+按钮 弹出保养表单
添加加油 点击+按钮 弹出加油表单
切换Tab 点击底部导航 切换页面

五、核心功能实现

5.1 主页面构建

dart 复制代码
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: IndexedStack(
      index: _selectedIndex,
      children: [
        _buildVehicleListPage(),
        _buildMaintenancePage(),
        _buildFuelPage(),
        _buildStatisticsPage(),
      ],
    ),
    bottomNavigationBar: NavigationBar(
      selectedIndex: _selectedIndex,
      onDestinationSelected: (index) {
        setState(() {
          _selectedIndex = index;
        });
      },
      destinations: const [
        NavigationDestination(icon: Icon(Icons.directions_car_outlined), label: '我的车辆'),
        NavigationDestination(icon: Icon(Icons.build_outlined), label: '保养记录'),
        NavigationDestination(icon: Icon(Icons.local_gas_station_outlined), label: '加油记录'),
        NavigationDestination(icon: Icon(Icons.analytics_outlined), label: '费用统计'),
      ],
    ),
  );
}

5.2 车辆卡片

dart 复制代码
Widget _buildVehicleCard(Vehicle vehicle) {
  final maintenanceCount = _maintenanceRecords.where((r) => r.vehicleId == vehicle.id).length;
  final fuelCount = _fuelRecords.where((r) => r.vehicleId == vehicle.id).length;

  return Card(
    margin: const EdgeInsets.only(bottom: 16),
    child: InkWell(
      onTap: () => _showVehicleDetail(vehicle),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            Row(
              children: [
                Container(
                  width: 60,
                  height: 60,
                  decoration: BoxDecoration(
                    color: vehicle.fuelType.color.withValues(alpha: 0.1),
                    borderRadius: BorderRadius.circular(12),
                  ),
                  child: Icon(Icons.directions_car, color: vehicle.fuelType.color),
                ),
                // ...车辆信息
                PopupMenuButton<String>(
                  onSelected: (value) {
                    if (value == 'edit') _showEditVehicleDialog(vehicle);
                    else if (value == 'delete') _deleteVehicle(vehicle);
                  },
                  itemBuilder: (context) => [
                    const PopupMenuItem(value: 'edit', child: Text('编辑')),
                    const PopupMenuItem(value: 'delete', child: Text('删除')),
                  ],
                ),
              ],
            ),
            const Divider(height: 24),
            Row(
              children: [
                Expanded(child: _buildInfoItem(Icons.speed, '${vehicle.currentMileage}', '公里')),
                Expanded(child: _buildInfoItem(Icons.build, '$maintenanceCount', '保养')),
                Expanded(child: _buildInfoItem(Icons.local_gas_station, '$fuelCount', '加油')),
              ],
            ),
          ],
        ),
      ),
    ),
  );
}

5.3 保养提醒状态

dart 复制代码
Widget _buildMaintenanceCard(MaintenanceRecord record) {
  final vehicle = _vehicles.firstWhere((v) => v.id == record.vehicleId);
  final daysUntilDue = record.nextDueDate.difference(DateTime.now()).inDays;
  final isOverdue = daysUntilDue < 0;

  return Card(
    child: Padding(
      padding: const EdgeInsets.all(16),
      child: Column(
        children: [
          // ...保养信息
          const Divider(height: 20),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              const Text('下次保养'),
              Container(
                padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
                decoration: BoxDecoration(
                  color: isOverdue
                      ? Colors.red.withValues(alpha: 0.1)
                      : daysUntilDue < 30
                          ? Colors.orange.withValues(alpha: 0.1)
                          : Colors.green.withValues(alpha: 0.1),
                  borderRadius: BorderRadius.circular(4),
                ),
                child: Text(
                  isOverdue
                      ? '已逾期${-daysUntilDue}天'
                      : daysUntilDue < 30
                          ? '还有$daysUntilDue天'
                          : DateFormat('yyyy-MM-dd').format(record.nextDueDate),
                  style: TextStyle(
                    color: isOverdue
                        ? Colors.red
                        : daysUntilDue < 30
                            ? Colors.orange
                            : Colors.green,
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    ),
  );
}

5.4 费用统计

dart 复制代码
Widget _buildStatisticsPage() {
  final totalMaintenanceCost = _maintenanceRecords.fold<double>(0, (sum, r) => sum + r.cost);
  final totalFuelCost = _fuelRecords.fold<double>(0, (sum, r) => sum + r.totalCost);
  final totalOtherCost = _expenseRecords.fold<double>(0, (sum, r) => sum + r.amount);
  final totalCost = totalMaintenanceCost + totalFuelCost + totalOtherCost;

  return Scaffold(
    appBar: AppBar(title: const Text('费用统计')),
    body: SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Column(
        children: [
          _buildTotalCostCard(totalCost),
          const SizedBox(height: 16),
          _buildCostBreakdownCard(totalMaintenanceCost, totalFuelCost, totalOtherCost),
          const SizedBox(height: 16),
          _buildCategoryChart(categoryCosts),
          const SizedBox(height: 16),
          _buildVehicleCostList(),
        ],
      ),
    ),
  );
}

5.5 车辆表单弹窗

dart 复制代码
void _showVehicleFormDialog(Vehicle? existingVehicle) {
  final isEditing = existingVehicle != null;
  final brandController = TextEditingController(text: existingVehicle?.brand ?? '');
  final modelController = TextEditingController(text: existingVehicle?.model ?? '');
  // ...其他控制器
  FuelType selectedFuelType = existingVehicle?.fuelType ?? FuelType.gasoline;

  showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    builder: (context) => StatefulBuilder(
      builder: (context, setModalState) => DraggableScrollableSheet(
        initialChildSize: 0.9,
        maxChildSize: 0.95,
        minChildSize: 0.5,
        expand: false,
        builder: (context, scrollController) => Container(
          padding: const EdgeInsets.all(20),
          child: ListView(
            controller: scrollController,
            children: [
              // 品牌输入框
              TextField(controller: brandController, decoration: const InputDecoration(labelText: '品牌')),
              // 型号输入框
              TextField(controller: modelController, decoration: const InputDecoration(labelText: '型号')),
              // 燃料类型选择
              Wrap(
                spacing: 8,
                children: FuelType.values.map((type) {
                  return ChoiceChip(
                    label: Text(type.label),
                    selected: selectedFuelType == type,
                    selectedColor: type.color.withValues(alpha: 0.2),
                    onSelected: (selected) {
                      if (selected) setModalState(() => selectedFuelType = type);
                    },
                  );
                }).toList(),
              ),
              // ...其他字段
              FilledButton(
                onPressed: () {
                  // 保存逻辑
                },
                child: Text(isEditing ? '保存' : '添加'),
              ),
            ],
          ),
        ),
      ),
    ),
  );
}

六、车辆管理知识拓展

6.1 保养周期参考

保养项目
机油更换

5000-10000公里
空气滤芯

10000-20000公里
刹车检查

20000-30000公里
轮胎换位

10000公里
冷却液

2年或40000公里
变速箱油

40000-60000公里

6.2 油耗计算方法

计算方式 公式 说明
百公里油耗 (加油量 / 行驶里程) × 100 常用计算方式
每公里成本 总加油费用 / 总行驶里程 成本核算
综合油耗 多次加油平均值 更准确的数据

6.3 车辆费用构成

35% 30% 15% 10% 10% 车辆年度费用构成 保险费用 加油费用 保养维修 停车费用 其他费用

6.4 新能源车与燃油车对比

对比项 燃油车 电动车 混动车
能源成本 较高 较低 中等
保养频率 较高 较低 中等
续航里程 较长 较短 较长
环保程度 一般 优秀 良好

七、扩展功能规划

7.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 车辆管理功能 保养记录功能 加油记录功能 费用统计功能 数据持久化 保养推送提醒 油耗趋势分析 多用户支持 数据导出功能 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 车辆管理应用开发计划

7.2 功能扩展建议

7.2.1 数据持久化
功能 说明
本地存储 SharedPreferences / SQLite
数据备份 导出JSON/CSV文件
数据恢复 从备份文件恢复
7.2.2 智能提醒
功能 说明
保养提醒 根据里程/时间智能提醒
保险到期 提前30天提醒续保
年检提醒 年检到期前提醒
7.2.3 数据分析
功能 说明
油耗趋势 月度/年度油耗变化
费用报告 自动生成费用报告
保养建议 基于里程的保养建议

八、注意事项

8.1 开发注意事项

  1. 颜色处理 :使用 withValues(alpha:) 替代已废弃的 withOpacity()

  2. 日期格式化:使用intl包的DateFormat进行日期格式化

  3. 状态同步:弹窗使用StatefulBuilder保持状态同步

  4. 数据关联:删除车辆时需级联删除相关记录

8.2 用户体验优化

🚗 用户体验建议 🚗

  • 车辆信息一目了然
  • 保养提醒及时准确
  • 费用统计清晰直观
  • 操作流程简单便捷

8.3 常见问题

问题 原因 解决方案
日期格式错误 DateFormat配置错误 检查格式字符串
弹窗状态不同步 StatefulBuilder未使用 使用setModalState
关联数据未删除 未实现级联删除 删除时清理关联记录
费用计算错误 数据类型转换问题 使用double类型

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
intl包 ^0.19.0
鸿蒙OS API 21+

9.2 运行命令

bash 复制代码
# 查看可用设备
flutter devices

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_vehicle.dart

# 运行到Windows
flutter run -d windows -t lib/main_vehicle.dart

# 代码分析
flutter analyze lib/main_vehicle.dart

十、总结

车辆管理应用通过完善的功能设计,帮助车主实现车辆信息的系统化管理。应用支持多车辆集中管理,每辆车可独立记录品牌、型号、车牌、里程等基本信息。保养记录功能详细记录每次保养的类型、费用、里程,并智能计算下次保养提醒时间,让车主不再错过保养时机。

加油记录功能完整记录每次加油的油量、单价、总价,便于后续油耗分析。费用统计模块提供多维度费用分析,包括保养费用、加油费用、其他费用的分类统计,以及按车辆维度的费用汇总,让用车成本一目了然。

界面设计采用蓝色主题风格,体现专业与可靠。车辆卡片通过燃料类型颜色区分不同动力类型,保养卡片通过颜色状态直观展示保养提醒状态。应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。

车辆管理,让爱车养护更轻松!

相关推荐
AI_零食2 小时前
Flutter 框架跨平台鸿蒙开发 - 鸿蒙渐变效果生成器应用
学习·flutter·ui·华为·harmonyos
盐焗西兰花2 小时前
鸿蒙学习实战之路-Share Kit系列(17/17)-Share Kit常见问题与避坑指南
学习·华为·harmonyos
autumn20052 小时前
Flutter 框架跨平台鸿蒙开发 - 智能灯光控制应用
flutter·华为·harmonyos
独特的螺狮粉2 小时前
开源鸿蒙跨平台Flutter开发:基于 CustomPaint 的高刷心电图 (ECG) 渲染引擎设计-临床体征实时监测终端
flutter·开源·harmonyos
小雨天気.3 小时前
Flutter 框架跨平台鸿蒙开发 - 跟生活有关的心情日记应用开发
flutter·生活·harmonyos
一直在想名3 小时前
Flutter 框架跨平台鸿蒙开发 - 色盲模拟器
flutter·华为·harmonyos
李李李勃谦3 小时前
Flutter 框架跨平台鸿蒙开发 - 正则测试应用
flutter·华为·php·harmonyos
世人万千丶3 小时前
Flutter 框架跨平台鸿蒙开发 - 鸿蒙护眼版本2048操作式游戏应用
学习·flutter·游戏·华为·harmonyos·鸿蒙
一直在想名3 小时前
Flutter 框架跨平台鸿蒙开发 - 心情天气应用
flutter·华为·harmonyos