【问题标题】:How to stock list with Hive in Flutter?如何在 Flutter 中使用 Hive 进行库存列表?
【发布时间】:2020-09-23 11:26:01
【问题描述】:

我希望将一些列表存入 Hive。

在我的 main.dart 中,我得到了:

Hive.registerAdapter(MedicalConstantsAdapter());
await Hive.openBox(MEDICAL_CONSTANTS);

在我的 medical.dart 中,我得到了:

@HiveType(typeId: 0)
class MedicalConstants extends HiveObject {
  @HiveField(0)
  List<SystolicPressure> systolicPressure;
  @HiveField(1)
  List<DiastolicPressure> diastolicPressure;

  MedicalConstants({
    this.systolicPressure,
    this.diastolicPressure
  });

  MedicalConstants.fromJson(Map<String, dynamic> json) {
    if (json['systolic_pressure'] != null) {
      systolicPressure = new List<SystolicPressure>();
      json['systolic_pressure'].forEach((v) {
        systolicPressure.add(new SystolicPressure.fromJson(v));
      });
    }
    if (json['diastolic_pressure'] != null) {
      diastolicPressure = new List<DiastolicPressure>();
      json['diastolic_pressure'].forEach((v) {
        diastolicPressure.add(new DiastolicPressure.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.systolicPressure != null) {
      data['systolic_pressure'] =
          this.systolicPressure.map((v) => v.toJson()).toList();
    }
    if (this.diastolicPressure != null) {
      data['diastolic_pressure'] =
          this.diastolicPressure.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class MedicalConstantsAdapter extends TypeAdapter<MedicalConstants> {
  @override
  final typeId = 1;

  @override
  MedicalConstants read(BinaryReader reader) {
    return MedicalConstants()
      ..diastolicPressure
      ..systolicPressure = reader.read();
  }

  @override
  void write(BinaryWriter writer, MedicalConstants obj) {
    writer
      ..write(obj.systolicPressure)
      ..write(obj.diastolicPressure);
  }
}

最后,在我的 session.dart 中,我得到了:

Hive.box(MEDICAL_CONSTANTS).values.toList().forEach((element) {
  print(element);
});

我得到的 2 个列表来自我的端点和列表中的数据库存。

我只是暂时将我的结果显示出来。

我尝试使用来自 hive flutter packages pub run build_runner build 的命令,但没有任何反应,这就是为什么我的 MedicalConstantsAdapter 没有正确构建?

有人知道如何正确使用它吗?

【问题讨论】:

    标签: flutter dart mobile flutter-dependencies flutter-hive


    【解决方案1】:

    medical.dart

    
    // add 'g' to file name to indicate generated
    part 'medical.g.dart'
    
    @HiveType(typeId: 0)
    class MedicalConstants extends HiveObject {
      @HiveField(0)
      List<SystolicPressure> systolicPressure;
      @HiveField(1)
      List<DiastolicPressure> diastolicPressure;
    
      MedicalConstants({
        this.systolicPressure,
        this.diastolicPressure
      });
    }
    
    

    一旦你运行,类型适配器就会生成到medical.g.dart

    flutter packages pub run build_runner build
    

    【讨论】:

    • 当我这样做时,视觉会说:part-of 指令必须是部分中的唯一指令。尝试删除其他指令,或将它们移动到它所属的库中。 (顺便更新了我的代码)
    • 由于某种原因,当我从计算机上拔下手机时(构建正在运行),生成了文件。不知道有没有用,过几分钟再发这里
    • 好吧,这并不完全有效,但我接受了答案,谢谢! :)
    • 我不小心写了“一部分”。它应该只是“部分”。这将解决指令问题
    • 是的,我确实看到并删除了它,现在一切正常
    猜你喜欢
    • 2020-10-17
    • 2021-01-22
    • 2021-07-14
    • 2021-12-11
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多