You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dart和Flutter开发应用并实现本地数据存储?

Flutter小店管理应用本地存储实现指南

存储方案选型

针对小店应用的商品、订单、会员等数据存储需求,推荐按照你的技术储备选择以下方案:

  • shared_preferences:官方维护的键值对存储插件,仅适合存轻量数据,比如店铺名称、默认打印设置、操作人账号这类小体量配置信息,不适合存储大量结构化业务数据
  • Hive(优先推荐):纯Dart实现的NoSQL本地数据库,无需编写SQL语句,配置门槛极低,读写性能优异,完全满足单店类应用的所有本地存储需求,对入门开发者非常友好
  • sqflite:SQLite的Flutter适配插件,适合有SQL基础、需要做多表关联查询的复杂场景,入门门槛高于Hive

项目启动落地思路

  • 先梳理核心业务数据结构:把你需要存储的所有业务数据的字段列清楚,比如商品(名称、条码、进价、售价、库存、分类)、订单(创建时间、关联商品列表、应收金额、实收金额、备注)、会员(手机号、姓名、累计消费、余额)等,不用一开始就做全,先整理最核心的2-3类数据即可
  • 优先跑通存储功能的最小demo:不用一开始就做完整的UI界面,先选Hive完成配置,跑通单类数据的增删改查逻辑,确认应用重启、设备关机重启后数据不会丢失,再做后续功能开发
  • 提前补充数据备份逻辑:本地存储存在设备损坏、应用卸载数据丢失的风险,开发时提前加手动导出备份功能,可以把存储的数据导出为JSON文件存在设备公共下载目录,需要时可以导入恢复,避免经营数据丢失
  • 功能迭代从小到大:先做最核心的商品录入、库存查询功能,再扩展订单记账、会员管理等功能,不要一开始就追求大而全

Hive极简上手代码示例

1. 引入依赖

在项目的pubspec.yaml文件中添加对应依赖:

dependencies:
  hive: ^2.2.3
  hive_flutter: ^1.1.0

dev_dependencies:
  hive_generator: ^2.0.1
  build_runner: ^2.4.6

执行flutter pub get安装依赖。

2. 定义数据实体类

以商品数据为例,新建product.dart文件:

import 'package:hive/hive.dart';

// 生成的适配文件,运行构建命令后自动生成
part 'product.g.dart';

// typeId每个实体类唯一,范围0-255
@HiveType(typeId: 0)
class Product extends HiveObject {
  // HiveField的序号每个字段唯一,不要随意修改
  @HiveField(0)
  late String name;

  @HiveField(1)
  late double sellingPrice;

  @HiveField(2)
  late int stock;
}

在项目根目录执行命令flutter packages pub run build_runner build,自动生成实体类的适配代码。

3. 初始化Hive

修改项目的main.dart文件,完成初始化:

import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'product.dart';

void main() async {
  // 初始化Hive
  await Hive.initFlutter();
  // 注册商品实体的适配器
  Hive.registerAdapter(ProductAdapter());
  // 打开商品存储的Box(可以理解为一个表)
  await Hive.openBox<Product>('productBox');
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('小店管理')),
      ),
    );
  }
}

4. 基础增删改查操作

// 获取商品存储Box
final productBox = Hive.box<Product>('productBox');

// 新增商品
final newProduct = Product()
  ..name = '瓶装可乐'
  ..sellingPrice = 3.0
  ..stock = 50;
productBox.add(newProduct);

// 查询所有商品
List<Product> allProducts = productBox.values.toList();

// 修改指定位置的商品库存
final product = productBox.getAt(0);
product?.stock = 49;
product?.save();

// 删除指定位置的商品
productBox.deleteAt(0);

内容的提问来源于stack exchange,提问作者flu tter 87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:45:04