Flutter 框架跨平台鸿蒙开发 - 智能购物清单生成
运行效果图智能购物清单生成是一款效率工具应用,根据冰箱剩余食材、食谱计划、日常消耗,自动生成购物清单,还能对比价格,省钱又省心。应用通过智能分析冰箱库存,自动识别需要补充的食材,并支持多平台价格对比,帮助用户做出最优惠的购买决策。应用以清新的青色为主色调,象征理性消费与智慧购物。涵盖购物清单、冰箱管理、购买历史、关于信息四大模块。用户可以管理清单、查看冰箱、对比价格、追踪历史,享受智能购物带来的便
智能购物清单生成应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图




1.1 应用简介
智能购物清单生成是一款效率工具应用,根据冰箱剩余食材、食谱计划、日常消耗,自动生成购物清单,还能对比价格,省钱又省心。应用通过智能分析冰箱库存,自动识别需要补充的食材,并支持多平台价格对比,帮助用户做出最优惠的购买决策。
应用以清新的青色为主色调,象征理性消费与智慧购物。涵盖购物清单、冰箱管理、购买历史、关于信息四大模块。用户可以管理清单、查看冰箱、对比价格、追踪历史,享受智能购物带来的便利。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 清单管理 | 添加管理购物清单 | 列表存储 |
| 自动生成 | 根据冰箱自动生成 | 智能分析 |
| 价格对比 | 多平台价格比较 | 底部弹窗 |
| 冰箱管理 | 食材库存管理 | 列表展示 |
| 购买追踪 | 购买历史记录 | 列表存储 |
| 省钱统计 | 节省金额统计 | 数据计算 |
1.3 商品分类定义
| 序号 | 分类名称 | Emoji | 颜色 | 描述 |
|---|---|---|---|---|
| 1 | 蔬菜 | 🥬 | #4CAF50 | 新鲜蔬菜 |
| 2 | 水果 | 🍎 | #FF9800 | 新鲜水果 |
| 3 | 肉类 | 🥩 | #F44336 | 禽畜肉类 |
| 4 | 海鲜 | 🦐 | #2196F3 | 鱼虾海鲜 |
| 5 | 乳制品 | 🧀 | #FFEB3B | 牛奶芝士 |
| 6 | 谷物 | 🌾 | #8D6E63 | 米面杂粮 |
| 7 | 调味品 | 🧂 | #9E9E9E | 油盐酱醋 |
| 8 | 零食 | 🍪 | #E91E63 | 零食小吃 |
| 9 | 饮品 | 🥤 | #00BCD4 | 饮料饮品 |
| 10 | 日用品 | 🧴 | #795548 | 生活用品 |
1.4 优先级定义
| 序号 | 优先级名称 | Emoji | 颜色 | 描述 |
|---|---|---|---|---|
| 1 | 紧急 | 🔴 | #F44336 | 急需购买 |
| 2 | 一般 | 🟡 | #FF9800 | 正常购买 |
| 3 | 不急 | 🟢 | #4CAF50 | 可缓购买 |
1.5 商店类型定义
| 序号 | 商店名称 | Emoji | 配送时间 | 描述 |
|---|---|---|---|---|
| 1 | 超市 | 🏪 | 0天 | 线下超市 |
| 2 | 生鲜店 | 🥬 | 0天 | 生鲜市场 |
| 3 | 网购 | 📦 | 5天 | 网上商城 |
| 4 | 批发市场 | 🏬 | 0天 | 批发采购 |
1.6 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | StatefulWidget | - |
| 数据存储 | 内存列表 | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.7 项目结构
lib/
└── main_smart_shopping_list.dart
├── SmartShoppingListApp # 应用入口
├── ItemCategory # 商品分类枚举
├── Priority # 优先级枚举
├── StoreType # 商店类型枚举
├── FridgeItem # 冰箱食材模型
├── ShoppingItem # 购物项模型
├── PriceComparison # 价格对比模型
├── SmartShoppingListHomePage # 主页面(底部导航)
├── _buildShoppingPage # 购物清单页面
├── _buildFridgePage # 冰箱页面
├── _buildHistoryPage # 历史页面
└── _buildProfilePage # 关于页面
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 价格对比流程
三、核心模块设计
3.1 数据模型设计
3.1.1 商品分类枚举 (ItemCategory)
enum ItemCategory {
vegetable(label: '蔬菜', emoji: '🥬', color: Color(0xFF4CAF50)),
fruit(label: '水果', emoji: '🍎', color: Color(0xFFFF9800)),
meat(label: '肉类', emoji: '🥩', color: Color(0xFFF44336)),
seafood(label: '海鲜', emoji: '🦐', color: Color(0xFF2196F3)),
dairy(label: '乳制品', emoji: '🧀', color: Color(0xFFFFEB3B)),
grain(label: '谷物', emoji: '🌾', color: Color(0xFF8D6E63)),
seasoning(label: '调味品', emoji: '🧂', color: Color(0xFF9E9E9E)),
snack(label: '零食', emoji: '🍪', color: Color(0xFFE91E63)),
drink(label: '饮品', emoji: '🥤', color: Color(0xFF00BCD4)),
daily(label: '日用品', emoji: '🧴', color: Color(0xFF795548));
final String label;
final String emoji;
final Color color;
}
3.1.2 冰箱食材模型 (FridgeItem)
class FridgeItem {
final String id; // 食材ID
final String name; // 食材名称
final ItemCategory category; // 食材分类
final double quantity; // 数量
final String unit; // 单位
final DateTime? expiryDate; // 过期日期
final DateTime addedAt; // 添加时间
bool get isLow => quantity < 2;
bool get isExpiringSoon => expiryDate != null &&
expiryDate!.difference(DateTime.now()).inDays <= 3;
}
3.1.3 购物项模型 (ShoppingItem)
class ShoppingItem {
final String id; // 商品ID
final String name; // 商品名称
final ItemCategory category; // 商品分类
final double quantity; // 数量
final String unit; // 单位
final Priority priority; // 优先级
final double estimatedPrice; // 预估价格
final double? actualPrice; // 实际价格
final String? store; // 购买商店
final bool isPurchased; // 是否已购买
final String? note; // 备注
final DateTime addedAt; // 添加时间
double get savings => actualPrice != null
? estimatedPrice - actualPrice!
: 0.0;
}
3.1.4 价格对比模型 (PriceComparison)
class PriceComparison {
final String storeName; // 商店名称
final StoreType storeType; // 商店类型
final double price; // 当前价格
final double? originalPrice; // 原价
final bool hasDiscount; // 是否有折扣
double get discount => originalPrice != null
? originalPrice! - price
: 0.0;
}
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 购物清单页结构
3.2.3 冰箱页结构
3.3 自动生成逻辑
3.4 价格对比逻辑
四、UI设计规范
4.1 配色方案
应用以清新的青色为主色调,象征理性消费与智慧购物:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #00BCD4 (Cyan) | 导航、主题元素 |
| 辅助色 | #26C6DA | 冰箱页面 |
| 第三色 | #4DD0E1 | 历史页面 |
| 强调色 | #80DEEA | 关于页面 |
| 背景色 | #FAFAFA | 页面背景 |
| 卡片背景 | #FFFFFF | 商品卡片 |
4.2 优先级颜色
| 优先级 | 色值 | 视觉效果 |
|---|---|---|
| 紧急 | #F44336 | 红色警示 |
| 一般 | #FF9800 | 橙色提醒 |
| 不急 | #4CAF50 | 绿色轻松 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 商品名称 | 16px | Regular | #000000 |
| 价格数字 | 18px | Bold | 主色 |
| 统计数字 | 20px | Bold | 白色 |
| 提示文字 | 12px | Regular | 灰色 |
4.4 组件规范
4.4.1 购物项卡片
┌─────────────────────────────────────┐
│ 🥬 西红柿 🔴 [对比][✓]│
│ 5 个 · 预估 ¥15.0 │
└─────────────────────────────────────┘
4.4.2 汇总卡片
┌─────────────────────────────────────┐
│ 预估 ¥120 已购 ¥85 节省 ¥35 │
└─────────────────────────────────────┘
4.4.3 价格对比卡片
┌─────────────────────────────────────┐
│ 🏪 永辉超市 [最优惠] │
│ 超市 │
│ ¥14.2 │
│ 省¥0.8 │
└─────────────────────────────────────┘
4.4.4 冰箱食材卡片
┌─────────────────────────────────────┐
│ 🥬 西红柿 ⚠️ │
│ 2 个 · 过期: 5/20 │
└─────────────────────────────────────┘
五、核心功能实现
5.1 自动生成购物清单
void _generateShoppingList() {
final lowItems = _fridgeItems.where((item) => item.isLow || item.isExpiringSoon);
for (var item in lowItems) {
if (!_shoppingList.any((s) => s.name == item.name)) {
final shoppingItem = ShoppingItem(
id: 'shop_${DateTime.now().millisecondsSinceEpoch}_${item.name}',
name: item.name,
category: item.category,
quantity: item.quantity < 1 ? 2 : item.quantity * 2,
unit: item.unit,
priority: item.isExpiringSoon ? Priority.high : Priority.medium,
estimatedPrice: _random.nextDouble() * 30 + 5,
);
setState(() {
_shoppingList.add(shoppingItem);
});
}
}
}
5.2 添加购物项
void _addShoppingItem(String name, ItemCategory category,
double quantity, String unit, Priority priority) {
final item = ShoppingItem(
id: 'shop_${DateTime.now().millisecondsSinceEpoch}',
name: name,
category: category,
quantity: quantity,
unit: unit,
priority: priority,
estimatedPrice: _random.nextDouble() * 30 + 5,
);
setState(() {
_shoppingList.add(item);
});
}
5.3 标记购买
void _togglePurchased(ShoppingItem item) {
setState(() {
final index = _shoppingList.indexWhere((i) => i.id == item.id);
if (index != -1) {
final updatedItem = ShoppingItem(
// ... 复制属性
isPurchased: !item.isPurchased,
);
if (updatedItem.isPurchased) {
_shoppingList.removeAt(index);
_purchasedItems.insert(0, updatedItem);
}
}
});
}
5.4 价格对比
List<PriceComparison> _generatePriceComparisons(ShoppingItem item) {
final basePrice = item.estimatedPrice;
return [
PriceComparison(
storeName: '永辉超市',
storeType: StoreType.supermarket,
price: basePrice * 0.95,
originalPrice: basePrice,
hasDiscount: true,
),
// ... 其他商店价格
];
}
六、交互设计
6.1 购物流程
6.2 自动生成流程
6.3 价格对比流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 真实价格API
价格功能:
- 各大超市价格API
- 实时价格更新
- 促销信息推送
- 历史价格走势
7.2.2 食谱关联
食谱功能:
- 根据食谱生成清单
- 食材用量计算
- 营养搭配建议
- 一键添加缺失食材
7.2.3 家庭共享
共享功能:
- 多人共享清单
- 实时同步更新
- 分工购买提醒
- 家庭账单统计
八、注意事项
8.1 开发注意事项
-
数据同步:清单状态需正确更新
-
价格精度:金额计算需注意精度
-
状态管理:购买状态需正确切换
-
用户体验:提供清晰的操作引导
-
性能优化:大量数据需分页加载
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 清单不更新 | setState未调用 | 检查状态更新 |
| 价格显示错误 | 精度问题 | 使用toStringAsFixed |
| 购买不移动 | 索引错误 | 检查列表操作 |
| 对比不显示 | 数据未生成 | 检查价格数据 |
| 统计不准确 | 计算逻辑错误 | 检查fold操作 |
8.3 使用技巧
🛒 智能购物清单使用技巧 🛒
清单管理建议
- 定期检查冰箱库存
- 使用自动生成功能
- 对比价格再购买
- 及时标记已购商品
省钱购物技巧
- 关注促销折扣信息
- 批量采购更优惠
- 选择最优惠渠道
- 避免冲动消费
清单规划建议
- 按优先级排序
- 合理规划购买量
- 注意保质期限
- 定期清理历史
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
| Web浏览器 | Chrome 90+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_smart_shopping_list.dart --web-port 8147
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_smart_shopping_list.dart
# 代码分析
flutter analyze lib/main_smart_shopping_list.dart
十、总结
智能购物清单生成应用通过购物清单、冰箱管理、购买历史、关于信息四大模块,为用户提供了一个便捷的智能购物平台。应用支持10种商品分类、3种优先级、4种商店类型,让购物变得更加理性和高效。
核心功能涵盖清单管理、自动生成、价格对比、购买追踪四大模块。商品分类从蔬菜到日用品,覆盖日常生活所需;优先级从紧急到不急,帮助合理安排购买顺序;价格对比从超市到网购,帮助找到最优惠渠道。
应用采用 Material Design 3 设计规范,以清新的青色为主色调,象征理性消费与智慧购物。通过本应用,希望能够帮助用户省时省力省钱,让购物变得更加轻松愉快。
智能购物清单——省钱又省心的购物助手
更多推荐

所有评论(0)