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

Flutter生成Hive适配器后调用box.put()报未知类型WIData错误

解决Hive存储时WIData未注册适配器的问题

排查方向与解决步骤

  • 全局定位WIData的来源
    用IDE全局搜索功能(比如Ctrl+Shift+F)查找项目中所有包含"WIData"的文件,包括dart源码、自动生成的适配器文件、甚至pubspec.yaml。大概率是你的WeatherData类内部引用了这个类型的字段(可能是第三方天气API返回的模型类),只是你没留意到。

  • 为WIData生成/注册适配器
    如果WIData是你自己定义的类,给它添加@HiveType(typeId: 你的唯一ID)注解,字段加上@HiveField(index),然后重新运行构建命令生成适配器;如果是第三方库的类,无法修改源码的话,手动编写TypeAdapter并在初始化Hive时注册:

    class WIDataAdapter extends TypeAdapter<WIData> {
      @override
      final typeId = 2; // 选一个未被使用的ID
    
      @override
      WIData read(BinaryReader reader) {
        // 实现读取逻辑,根据WIData的字段结构处理
        return WIData(
          // 示例:reader.readString(), reader.readDouble()等
        );
      }
    
      @override
      void write(BinaryWriter writer, WIData obj) {
        // 实现写入逻辑
        writer.writeString(obj.someField);
        // 其他字段同理
      }
    }
    

    然后在Hive初始化时注册:

    Hive.registerAdapter(WIDataAdapter());
    
  • 彻底清理缓存与重建
    执行以下命令彻底清理后重新构建:

    flutter clean
    rm -rf .dart_tool build
    flutter pub get
    flutter packages pub run build_runner build --delete-conflicting-outputs
    
  • 检查隐式类型引用
    排查代码中是否有隐式推断为WIData的变量,比如var weatherData = apiResponse.data;如果apiResponse.data是WIData类型,你直接将其传入box.put()或者赋值给WeatherData的某个字段,都会触发这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:08