Hive保存信息时出现问题



想要创建点击按钮后保存信息的功能(保存)

但是Hive给出错误…VS画面

错误在这一行:

static Box notes = Hive.box(HiveKeys.notesKey);

异常发生。HiveError: The box ">notes";)

首先,您不能直接将hive数据输入到特定的模型中。您需要从动态框中获取数据,然后将该数据强制转换为所需的类型,第二件事是,您似乎已经在代码中的某个地方打开了这个框。如果你能分享你打开hive box

的代码就太好了

如果您想以列表形式存储数据,那么请遵循以下步骤

  • 步骤1:放入main.dart文件

等待Hive.openBox("hiveTable";

  • 步骤2:创建一个包含hive适配器的模型类

    part 'hive_clean_entity.freezed.dart';
    part 'hive_clean_entity.g.dart';
    @freezed
    @HiveType(typeId: 6, adapterName: "ContactCleanHiveAdapter")
    @freezed
    class HiveCleanEntity with _$HiveCleanEntity {
    const factory HiveCleanEntity({
    @HiveField(0) @Default("") String contactId,
    @HiveField(1) @Default("") String displayName,
    @HiveField(2) @Default("") String givenName,
    @HiveField(3) @Default("") String phoneNumber,
    }) = _HiveCleanEntity;
    factory HiveCleanEntity.initial() => const HiveCleanEntity(
    contactId: "",
    displayName: "",
    givenName: "",
    phoneNumber: "",
    );
    }
    
  • 像这样

-你可以传递你选择的typeId

  • 步骤3:运行build_runner命令,生成模型dto的2个文件

    flutter pub run build_runner watch——delete-conflict -outputs

  • 步骤4:现在打开你想要存储数据的盒子:

    ListHiveCleanEntity putlist = [];

    HiveCleanEntity hiveCleanEntity = 
    HiveCleanEntity(
    contactId: “1”,
    displayName: "2",
    givenName: "xyz",
    phoneNumber:”+91”);
    putlist.add(hiveCleanEntity);
    final cleanContactBox = Hive.box<List>("hiveTable");
    cleanContactBox.put("subTable",putlist);
    
  • 步骤5:将数据放入本地存储

    final list = cleanContactBox.get("subTable")?.cast " HiveCleanEntity>() ??[],