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

Flutter使用Hive数据库出现unknown typeId: 32未注册适配器报错求助

Hive unknown typeId: 32 错误排查方案

核心原因

报错提示的typeId 32和你注册的Tasks模型typeId=1不匹配,问题并非出在适配器注册逻辑本身,而是本地持久化的Hive数据存在冲突。

排查步骤

  • 旧Box缓存冲突(概率最高)
    你之前调试过程中大概率向TheList Box中存入过其他typeId=32的自定义模型,或者修改过模型的typeId后未清理本地缓存,Hive读取旧数据时找不到对应适配器就会抛出该错误。
    临时解决方法:在打开Box前先删除本地旧缓存,测试正常后可删除该行代码:

    Hive.registerAdapter(TasksAdapter());
    // 新增该行清理旧数据
    await Hive.deleteBoxFromDisk("TheList");
    await Hive.openBox<Tasks>("TheList");
    

    也可以直接卸载应用重装,彻底清理本地Hive存储。

  • 其他Box未适配
    检查项目中所有Hive.openBox()调用,确认你是否打开了其他存储自定义模型的Box,且对应模型的适配器未完成注册,所有用到的自定义Hive模型都需要提前调用Hive.registerAdapter()注册。

  • 未重新生成适配器
    如果你修改过@HiveType注解的typeId值后未重新执行构建命令,会导致生成的适配器和模型注解的typeId不匹配,执行以下命令重新生成适配器即可:

    flutter packages pub run build_runner build --delete-conflicting-outputs
    
  • Box存入非指定类型数据
    确认你操作TheList Box时,仅存入Tasks类型的实例,如果不小心存入了其他未注册适配器的自定义模型,也会触发该错误。

验证方法

你可以尝试打开一个全新命名的Box测试,如果操作新Box无报错,即可100%确认是旧Box缓存冲突导致的问题:

await Hive.openBox<Tasks>("test_empty_box");

内容的提问来源于stack exchange,提问作者Sagar Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:18:02