Home > Net >  Dart Hive Not Storing pre defined variable
Dart Hive Not Storing pre defined variable

Time:02-22

My Hive Modal Class. Below that you can find my generated class.

@HiveType(typeId: 1)
class Employee {
  Employee({
    required this.employeeId,
    required this.officeId,
    required this.email,
    required this.name,
    required this.position,
    required this.number,
  });

  @HiveField(0)
  final String employeeId;

  @HiveField(1)
  final String officeId;

  @HiveField(2)
  final String email;

  @HiveField(3)
  final String name;

  @HiveField(4)
  final String position;

  @HiveField(5)
  final int number;

  @HiveField(6)
  final String uid = getRandomString(15);


  factory Employee.fromJson(Map<String, dynamic> json) => Employee(
        employeeId: json["employeeId"],
        officeId: json["officeId"],
        email: json["email"],
        name: json["name"],
        position: json["position"],
        number: json["number"],
      );

  Map<String, dynamic> toJson() => {
        "employeeId": employeeId,
        "officeId": officeId,
        "email": email,
        "name": name,
        "position": position,
        "number": number,
      };
}

It is not storing the data which I am passing in uid of random 15 digits. the adapters are generated correctly.

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'employee.dart';

// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************

class EmployeeAdapter extends TypeAdapter<Employee> {
  @override
  final int typeId = 1;

  @override
  Employee read(BinaryReader reader) {
    final numOfFields = reader.readByte();
    final fields = <int, dynamic>{
      for (int i = 0; i < numOfFields; i  ) reader.readByte(): reader.read(),
    };
    return Employee(
      employeeId: fields[0] as String,
      officeId: fields[1] as String,
      email: fields[2] as String,
      name: fields[3] as String,
      position: fields[4] as String,
      number: fields[5] as int,
    );
  }

  @override
  void write(BinaryWriter writer, Employee obj) {
    writer
      ..writeByte(7)
      ..writeByte(0)
      ..write(obj.employeeId)
      ..writeByte(1)
      ..write(obj.officeId)
      ..writeByte(2)
      ..write(obj.email)
      ..writeByte(3)
      ..write(obj.name)
      ..writeByte(4)
      ..write(obj.position)
      ..writeByte(5)
      ..write(obj.number)
      ..writeByte(6)
      ..write(obj.uid);
  }

  @override
  int get hashCode => typeId.hashCode;

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

I have Checked the adapters i am not passing the data through constructor because it only takes constant values. What can i do now?

Help!! Help!!

CodePudding user response:

Do this instead. Pass the dynamic data to the constructor body but not as a parameter. See below.

@HiveType(typeId: 1)
class Employee {
  Employee({
    required this.employeeId,
    required this.officeId,
    required this.email,
    required this.name,
    required this.position,
    required this.number,

  }){
    uid = getRandomString(15);
  }

  @HiveField(0)
  final String employeeId;

  @HiveField(1)
  final String officeId;

  @HiveField(2)
  final String email;

  @HiveField(3)
  final String name;

  @HiveField(4)
  final String position;

  @HiveField(5)
  final int number;

  @HiveField(6)
  late String uid;

  
  factory Employee.fromJson(Map<String, dynamic> json) => Employee(
    employeeId: json["employeeId"],
    officeId: json["officeId"],
    email: json["email"],
    name: json["name"],
    position: json["position"],
    number: json["number"],
  );

  Map<String, dynamic> toJson() => {
    "employeeId": employeeId,
    "officeId": officeId,
    "email": email,
    "name": name,
    "position": position,
    "number": number,
  };

}
  • Related