如何从 hive Flutter中获取数据

nlejzf6q  于 2022-12-12  发布在  Hive
关注(0)|答案(1)|浏览(213)

我目前正在做一个项目,这是数独和用户界面和游戏页面的一切都完成了,除了数据库。问题是当用户登录,他可以玩游戏,但用户的数据没有存储。登录的详细信息存储在一个不同的模型,我已经创建了两个模型的游戏数据和注册信息。它是本地存储。现在,我需要解析用户的数据,并且需要在用户恢复或应用程序重启时访问这些数据
我已经为游戏数据创建了一个模型

@HiveType(typeId: 0)
class GameDataModel extends HiveObject {
  @HiveField(0)
  final String star;

  @HiveField(1)
  final String avatar;

  @HiveField(2)
  final String saveGame;

  GameDataModel({
    required this.star,
    required this.avatar,
    required this.saveGame,
  });

这和登录模型是

@HiveType(typeId: 1)
class LoginModel extends HiveObject {
  @HiveField(0)
  int? uid;

  @HiveField(1)
  final String username;

  @HiveField(2)
  final String password;

  LoginModel({
    this.uid,
    required this.username,
    required this.password,
  });

这现在我需要的是有明星,头像和游戏数据的用户。完成一个级别后,我需要存储收集的明星到用户id和保存它。我怎么做?

qrjkbowd

qrjkbowd1#

您需要初始化所有已创建的Model及其适配器和唯一的typeId。您正在main.dart中执行此操作,但其中一些已禁用

Future<void> main() async {
 await Hive.initFlutter();
  // if (!Hive.isAdapterRegistered(LoginModelAdapter().typeId)) {
  //   Hive.registerAdapter(LoginModelAdapter());
  // }
  //  if (!Hive.isAdapterRegistered(GameDataModelAdapter().typeId)) {
  //   Hive.registerAdapter(GameDataModelAdapter());
  // }
  if(!Hive.isAdapterRegistered(UserModelAdapter().typeId)){
    Hive.registerAdapter(UserModelAdapter());
  }
  allData = await Hive.openBox('user model');
  //  gameDataDb = await Hive.openBox('user_db');
  //  loginDb = await Hive.openBox('user_db');
  runApp(const MyApp());
}

应该看起来像:

Future<void> main() async {
 await Hive.initFlutter();
   if (!Hive.isAdapterRegistered(LoginModelAdapter().typeId)) {
     Hive.registerAdapter(LoginModelAdapter());
   }
    if (!Hive.isAdapterRegistered(GameDataModelAdapter().typeId)) {
     Hive.registerAdapter(GameDataModelAdapter());
   }
  if(!Hive.isAdapterRegistered(UserModelAdapter().typeId)){
    Hive.registerAdapter(UserModelAdapter());
  }
  allData = await Hive.openBox('user model');
  //  gameDataDb = await Hive.openBox('user_db');
  //  loginDb = await Hive.openBox('user_db');
  runApp(const MyApp());
}

您也使用相同的typeId(1)作为UserModel和GameDataModel。因此,UserModelAdapter永远不会注册,您也无法储存任何数据。
将UserModel typeId从1更改为2,它将正常工作。
@Configuration 单元类型(类型ID:1)-〉 @Configuration 单元类型(类型ID:2)的

相关问题