【问题标题】:Problem with Hive while saving the information保存信息时 Hive 出现问题
【发布时间】:2023-01-30 13:13:20
【问题描述】:

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

但是蜂巢给出了错误...Screen of VS

错误在这一行:

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

发生异常。 HiveError(HiveError:框“笔记" 已经打开并且类型为 Box。)

【问题讨论】:

    标签: flutter dart hive


    【解决方案1】:

    首先,您不能直接将配置单元数据键入特定模型。您需要从框中获取动态数据,然后将该数据转换为所需的类型,第二件事是您似乎已经在代码中的某处打开了此框。如果您可以在打开蜂巢箱的地方分享代码,那就太好了

    【讨论】:

      【解决方案2】:

      如果您想以列表形式存储数据,请按照以下步骤操作

      • 第一步:输入main.dart文件

      等待 Hive.openBox<List>("hiveTable");

      • 第二步:制作一个包含hive的adapter的模型类

         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 命令,生成 2 个模型 dto 文件

        flutter pub 运行 build_runner watch --delete-conflicting-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);
        
      • 第五步:获取数据到本地存储

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 2022-06-12
        相关资源
        最近更新 更多