You need to enable JavaScript to run this app. Flutter Hive访问嵌套HiveList字段提示HiveObjectMixin无对应getter怎么办
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Hive访问嵌套HiveList字段提示HiveObjectMixin无对应getter怎么办

问题原因及解决方法

你的报错核心是Dart无法推断HiveList内存储的元素类型,同时UserAdapter的字段索引匹配存在错误,按以下步骤修改即可:

1. 为HiveList指定泛型类型

未指定泛型的HiveList默认元素类型为HiveObjectMixin,自然不存在cost字段。修改User类中的transactions字段定义:

@HiveType(typeId: 1)
class User extends HiveObject {
  @HiveField(0)
  late String nameFamily;

  @HiveField(1)
  late String apiToken;

  @HiveField(2)
  late String mobileNumber;

  // 新增泛型指定为Transactions
  @HiveField(3)
  late HiveList<Transactions> transactions;
}

2. 修复UserAdapter的字段索引错误

你的User类仅定义了4个Hive字段(索引0~3),但适配器中存在两处错误:

  • write方法中写入了错误的字段数量6,实际应为4
  • read方法中错误读取索引5的字段赋值给transactions,对应正确索引为3

修改后的UserAdapter代码:

class UserAdapter extends TypeAdapter<User> {
  @override
  final int typeId = 1;

  @override
  User read(BinaryReader reader) {
    final numOfFields = reader.readByte();
    final fields = <int, dynamic>{
      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return User()
      ..nameFamily = fields[0] as String
      ..apiToken = fields[1] as String
      ..mobileNumber = fields[2] as String
      // 修正索引为3,同时指定cast的泛型
      ..transactions = (fields[3] as HiveList).castHiveList<Transactions>();
  }

  @override
  void write(BinaryWriter writer, User obj) {
    writer
      // 修正字段数量为4
      ..writeByte(4)
      ..writeByte(0)
      ..write(obj.nameFamily)
      ..writeByte(1)
      ..write(obj.apiToken)
      ..writeByte(2)
      ..write(obj.mobileNumber)
      ..writeByte(3)
      ..write(obj.transactions);
  }

  @override
  int get hashCode => typeId.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is UserAdapter &&
          runtimeType == other.runtimeType &&
          typeId == other.typeId;
}

3. 确认前置配置

  • 确保Transactions对应的适配器已经在Hive初始化阶段完成注册
  • 如果你使用自动生成适配器的方案,修改模型后重新执行命令生成新的适配代码:
    flutter packages pub run build_runner build
    
  • 本地已存在的旧格式数据需要清理,避免结构不兼容导致新的报错

完成修改后再运行原代码即可正常读取cost字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:51:00