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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:17:36