Flutter应用Hive报错:未知typeId:36,初始化后仍未解决
解决HiveError: Cannot read, unknown typeId: 36问题
核心问题分析
你遇到的错误是Hive读取本地存储时,发现了未注册typeId(36)的数据,但你并没有对应模型。Hive.initFlutter()仅负责初始化Hive运行环境,无法处理未注册typeId的问题,所以无效。
解决方案
清除旧的Hive存储数据
大概率是之前测试数据、废弃模型的数据残留导致的。可以:- 卸载重装应用,彻底清除本地Hive缓存;
- 或在代码中主动删除目标box(已知问题box名称时):
若不确定问题box,可清空所有Hive数据(注意备份重要内容):await Hive.deleteBoxFromDisk('目标box名称');await Hive.deleteFromDisk();
排查第三方依赖的Hive模型
检查pubspec.yaml中的依赖,确认是否有自带Hive模型的第三方库(如部分状态管理、工具类库)。这类库可能注册了typeId 36的adapter,需要在初始化时同步注册,或查看库文档确认配置要求。核对自定义模型的typeId
重新检查你的18个模型,是否存在不小心将typeId设为36的情况?或是有重复的typeId配置?比如遗漏了某个标注@HiveType(typeId: 36)的模型。检查初始化顺序
确保代码执行顺序正确:先调用await Hive.initFlutter(),然后注册所有adapter(自定义+第三方),最后再打开Hive box。先开box再注册adapter的错误顺序也会触发这类读取异常。升级Hive并重新生成adapter
将hive和hive_flutter升级到最新稳定版,再重新运行build_runner生成adapter:flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Sachithya Rivisara
相关产品推荐
相关产品推荐

