想要创建点击按钮后保存信息的功能(保存)
但是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>() ??[],