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

Flutter Hive报错:TypeAdapter的typeId 0已被占用

解决Hive报错:There is already a TypeAdapter for typeId 0

问题根源

代码存在typeId不一致的核心冲突:

  • Product.dart中手动设置了@HiveType(typeId: 1)
  • 自动生成的Product.g.dart里,ProductAdapter的typeId却被设为0

这种不一致加上旧缓存未彻底清理,最终触发重复注册报错。

分步解决方案

1. 统一typeId并重新生成适配器

  • 打开Product.dart,确认@HiveType(typeId: 1)(确保该ID未被其他自定义Hive类占用)
  • 执行代码生成命令,强制同步适配器的typeId:
    flutter packages pub run build_runner build --delete-conflicting-outputs
    
    执行后检查Product.g.dart,确认typeId已与Product.dart中的设置一致(应为1)。

2. 避免适配器重复注册

修改main.dart的注册逻辑,添加判断确保只注册一次:

Future<void> main() async {
  await Hive.initFlutter();
  if (!Hive.isAdapterRegistered(1)) { // ID与typeId保持一致
    Hive.registerAdapter(ProductAdapter());
  }

  boxProducts = await Hive.openBox<Product>('productsBox');
  runApp(const MyApp());
}

3. 彻底清理旧数据与缓存

  • 执行flutter clean清理项目缓存
  • 卸载模拟器中的应用并重启模拟器(确保Hive本地存储被完全清除)
  • 重新运行项目

额外注意

  • 所有自定义Hive类的typeId必须唯一,不能与内置类型或其他类重复
  • 禁止在多个代码位置注册同一个适配器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:14:58