Flutter Hive保存含自定义对象列表的自定义类重启后列表丢失问题
排查解决方案
- 检查两个自定义类的适配器是否都完成注册
大概率只注册了HiveVitals的生成适配器,遗漏了HiveDiscomfort的适配器注册,Hive不会自动注册嵌套自定义类型的适配器。需要在应用初始化Hive的逻辑中,同时添加两个适配器的注册代码:Hive.registerAdapter(HiveVitalsAdapter()); Hive.registerAdapter(HiveDiscomfortAdapter()); // 必须添加这行,不能遗漏 - 重新生成Hive序列化代码
如果你是后续新增的两个List<HiveDiscomfort>字段,没有重新执行构建命令,生成的g.dart序列化代码会缺失对应字段的处理逻辑,导致反序列化时该字段直接使用默认空值。执行以下命令重新生成代码:flutter packages pub run build_runner build --delete-conflicting-outputs - 确认Hive typeId无冲突
检查项目中所有@HiveType注解配置的typeId,确认1和2没有被其他自定义Hive类占用,typeId重复会导致反序列化逻辑错乱,无法正确读取嵌套类数据。 - 排查构造函数默认值问题
你当前给两个列表字段设置的默认值为const [],如果写入时你没有主动给字段赋值非const的列表实例,部分版本Hive序列化const常量集合时会出现异常,建议将默认值修改为非const的空列表:HiveVitals({ this.id, this.date, List<HiveDiscomfort>? otherDiscomfort, List<HiveDiscomfort>? mentalDiscomfort, }) : otherDiscomfort = otherDiscomfort ?? [], mentalDiscomfort = mentalDiscomfort ?? [];
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

