Flutter Hive中addDrinkWater变量赋值为null问题求助
问题原因及解决办法
1. 类型不匹配(核心问题)
在SettingsModel中,addDrinkWater的声明类型是DrinkModel?,但你在fromJson构造函数里赋值的是AddDrinkModel实例——两者类型不兼容。Dart是强类型语言,这种隐式类型转换不会生效,直接导致赋值失败,addDrinkWater保持null。
修改SettingsModel的类型声明:
@HiveType(typeId: 1) class SettingsModel extends HiveObject { @HiveField(13) // 将DrinkModel改为AddDrinkModel,保持类型一致 AddDrinkModel? addDrinkWater; SettingsModel({ this.addDrinkWater, }); SettingsModel.fromJson(Map<String, dynamic> json) { addDrinkWater = AddDrinkModel.fromJson(json['_counter']); } }
2. JSON层级验证
确保你解析的是settings节点下的_counter数据。如果根JSON结构包含settings对象,调用SettingsModel.fromJson时必须传入json['settings']而非整个JSON对象,否则json['_counter']会返回null,导致AddDrinkModel.fromJson无法正确初始化。
示例调用:
// 假设根JSON结构如下 Map<String, dynamic> rootJson = { "settings": { "_counter": { "value": 0, "timestamp": "2023-06-06T13:27:36.627Z" } } }; // 正确解析方式 SettingsModel settings = SettingsModel.fromJson(rootJson['settings']);
3. Hive类型注册检查
确认代码中已注册AddDrinkModel和SettingsModel的适配器,否则Hive存储时可能出现序列化/反序列化异常:
void main() async { await Hive.initFlutter(); Hive.registerAdapter(SettingsModelAdapter()); Hive.registerAdapter(AddDrinkModelAdapter()); // 其他初始化逻辑 }
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

