智能购物清单生成应用


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

一、项目概述

运行效果图

image-20260409225216775

image-20260409225221398

image-20260409225225122

image-20260409225229641

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 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
SmartShoppingListHomePage

购物清单页

冰箱页

历史页

关于页

清单列表

自动生成

价格对比

购买操作

食材列表

库存预警

过期提醒

购买记录

省钱统计

功能说明

省钱技巧

清单生成器
ListGenerator

价格对比器
PriceComparator

库存分析器
StockAnalyzer

FridgeItem
冰箱食材

ShoppingItem
购物项

PriceComparison
价格对比

ItemCategory
商品分类

2.2 类图设计

has

has

has

has

SmartShoppingListApp

+Widget build()

«enumeration»

ItemCategory

+String label

+String emoji

+Color color

+vegetable()

+fruit()

+meat()

+seafood()

+dairy()

+grain()

+seasoning()

+snack()

+drink()

+daily()

«enumeration»

Priority

+String label

+String emoji

+Color color

+high()

+medium()

+low()

«enumeration»

StoreType

+String label

+String emoji

+int delivery

+supermarket()

+fresh()

+online()

+wholesale()

FridgeItem

+String id

+String name

+ItemCategory category

+double quantity

+String unit

+DateTime? expiryDate

+DateTime addedAt

+getIsLow()

+getIsExpiringSoon()

ShoppingItem

+String id

+String name

+ItemCategory category

+double quantity

+String unit

+Priority priority

+double estimatedPrice

+double? actualPrice

+String? store

+bool isPurchased

+String? note

+DateTime addedAt

+getSavings()

PriceComparison

+String storeName

+StoreType storeType

+double price

+double? originalPrice

+bool hasDiscount

+getDiscount()

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 主页面布局

SmartShoppingListHomePage

IndexedStack

购物清单页

冰箱页

历史页

关于页

NavigationBar

购物清单 Tab

冰箱 Tab

历史 Tab

关于 Tab

3.2.2 购物清单页结构

购物清单页

SliverAppBar

快速统计

汇总卡片

自动生成按钮

清单列表

待购数量

已购数量

已省金额

预估金额

已购金额

节省金额

商品卡片

分类图标

名称数量

价格对比

购买勾选

3.2.3 冰箱页结构

冰箱页

SliverAppBar

食材总数

预警提示

食材列表

库存不足

即将过期

食材卡片

分类图标

名称数量

过期日期

预警图标

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 后续版本规划

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 2024-03-24 2024-03-31 基础UI框架 清单管理功能 价格对比功能 真实价格API 食谱关联功能 智能推荐算法 家庭共享清单 语音添加商品 优惠券集成 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 智能购物清单生成应用开发计划

7.2 功能扩展建议

7.2.1 真实价格API

价格功能:

  • 各大超市价格API
  • 实时价格更新
  • 促销信息推送
  • 历史价格走势
7.2.2 食谱关联

食谱功能:

  • 根据食谱生成清单
  • 食材用量计算
  • 营养搭配建议
  • 一键添加缺失食材
7.2.3 家庭共享

共享功能:

  • 多人共享清单
  • 实时同步更新
  • 分工购买提醒
  • 家庭账单统计

八、注意事项

8.1 开发注意事项

  1. 数据同步:清单状态需正确更新

  2. 价格精度:金额计算需注意精度

  3. 状态管理:购买状态需正确切换

  4. 用户体验:提供清晰的操作引导

  5. 性能优化:大量数据需分页加载

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 设计规范,以清新的青色为主色调,象征理性消费与智慧购物。通过本应用,希望能够帮助用户省时省力省钱,让购物变得更加轻松愉快。

智能购物清单——省钱又省心的购物助手


Logo

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

更多推荐