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
相关产品推荐
相关产品推荐

