【问题标题】:Flutter Hive not saving SubclassesFlutter Hive 不保存子类
【发布时间】:2022-01-17 22:56:24
【问题描述】:

假设我有以下 3 个类:

class Human{

    String name;

    Human({this.name});

}

class Student extends Human{

    int id;

    Student(this.id): super(name: name);
}

class Proffessor extends Human{

    int age;

    Proffessor(this.age): super(name: name);
}

class Abc {

    List<Human> humans;

    Abc(this.humans);
//Just Imagine my humans List consists of Proffessors AND Students (both Subtypes of human)
}

我正在使用以下依赖项 hive_generator: ^1.1.1 hive_flutter:^1.1.0 蜂巢:^2.0.4 dev_dependencies: build_runner:^2.1.4 基本上,我有一个由教授和学生组成的列表,但是当这个列表被保存并稍后从 Hive 中检索时,该列表中的所有对象都被强制转换为人类

Abc read(BinaryReader reader) {
    final numOfFields = reader.readByte();

    final fields = <int, dynamic>{
        for (int i = 0; i < numOfFields; i++) 
            reader.readByte(): reader.read(),  
    };

    return Abc(
        fields[0] as int,
        fields[1] as String?,
        fields[2] as String?,
        (fields[3] as List?)?.cast<Human>(), // I need the Elements in this List as Student / Proffessor not Human
        fields[4] as int,
    );}

//基本上我正在丢失信息,因为适配器将学生和教授转换为人类

有解决办法吗?如果不是,那么 hive 的下一个最佳替代品是什么?

【问题讨论】:

    标签: flutter flutter-hive


    【解决方案1】:

    我不知道到底发生了什么。我就是这样用蜂巢的

    @HiveType(typeId: 1)
    class FavouriteSingerDao extends HiveObject{
    
     @HiveField(0)
      int id;
    
     @HiveField(2)
      String singerName;
    
     @HiveField(3)
      String singerTag;
     }
    

    static Future addFavouriteSinger(SingerMapper favouriteSinger) async {
        final transaction = FavouriteSingerDao()
          ..id = favouriteSinger.id
          ..singerName = favouriteSinger.singerName
          ..singerTag = favouriteSinger.singerTag;
    
        final box = BoxesUtils.getFavouriteSingers();
        box.put(favouriteSinger.id, transaction).then(
              (value) => Fluttertoast.showToast(
            msg: TEXT_ADD_SUCCESS,
          ),
        );
      }
    
      static List<FavouriteSingerDao> getFavouriteSingerItems() {
        final box = BoxesUtils.getFavouriteSingers();
        List<FavouriteSingerDao> favouriteSingers =
        box.values.toList().cast<FavouriteSingerDao>();
        return favouriteSingers;
      }
    

    【讨论】:

    • 你没有扩展另一个类,当我不使用子类时,Hive 工作得很好或教授
    猜你喜欢
    • 1970-01-01
    • 2022-07-02
    • 2022-12-17
    • 2021-01-22
    • 2022-11-12
    • 2022-12-03
    • 2018-08-13
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多