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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:07