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

如何在Hive中存储类列表?含API获取列表与多属性存储场景

将自定义模型列表与客户信息存入Hive

我通过API获取了一个包含自定义模型类的ItemList列表,现在希望将该列表与客户姓名、客户地址等其他属性一同存储到Hive中,相关代码如下:

import 'package:hive/hive.dart';
import '../item_model.dart';
import 'hive_model.dart';
part 'saved_hive_model.g.dart';

@HiveType(typeId: 15)
class SavedDatInHive {
  @HiveField(10)
  final String totalPrice;
  
  @HiveField(11)
  final List<ItemList> list;
  
  @HiveField(12)
  final String CustomerName;

  SavedDatInHive(this.list, this.CustomerName, {required this.totalPrice});
}

核心实现要点

  • ItemList需适配Hive序列化:Hive无法直接存储未标记的自定义对象,ItemList类必须添加Hive注解,示例如下:
    import 'package:hive/hive.dart';
    part 'item_list.g.dart';
    
    @HiveType(typeId: 16)
    class ItemList {
      @HiveField(0)
      final String itemId;
      
      @HiveField(1)
      final String itemName;
      // 补充你的其他字段
    
      ItemList(this.itemId, this.itemName);
    }
    
  • 生成适配器文件:完成类注解后,执行命令生成Hive所需的适配器代码:
    flutter packages pub run build_runner build
    
  • 注册适配器:在应用启动时注册所有自定义模型的适配器,确保Hive能识别这些类型:
    void main() async {
      await Hive.initFlutter();
      Hive.registerAdapter(SavedDatInHiveAdapter());
      Hive.registerAdapter(ItemListAdapter());
      runApp(MyApp());
    }
    
  • 存储与读取示例:
    // 存储数据
    final dataBox = await Hive.openBox('customer_order_box');
    final orderData = SavedDatInHive(
      apiFetchedItemList, // 从API获取的ItemList列表
      '李四',
      totalPrice: '256.80',
    );
    await dataBox.put('order_001', orderData);
    
    // 读取数据
    final fetchedOrder = dataBox.get('order_001') as SavedDatInHive;
    print(fetchedOrder.CustomerName);
    print(fetchedOrder.list.length);
    

内容的提问来源于stack exchange,提问作者Ankur Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:42:16