在使用 Hive 进行颤振时,您如何将自定义对象从 POST 响应正文添加到框?

Posted

技术标签:

【中文标题】在使用 Hive 进行颤振时,您如何将自定义对象从 POST 响应正文添加到框?【英文标题】:In flutter using Hive how would you add a custom object from a POST response body to a box? 【发布时间】:2021-01-14 10:23:03 【问题描述】:

我希望将用户对象存储在蜂巢箱中。 POST 成功后,我返回一个用户对象,Hive 不会将其添加到框中,因为它不是我编写的 HiveType 模型 (HiveUser)。有没有办法解决这个问题,或者我可以将我的用户对象转换为我专门为将用户添加到框中而编写的 HiveUser 对象?这里有几个 sn-ps 可以给出一个想法。

我在哪里调用 POST 函数并取回用户对象

onPressed: () async 
  User user;
  try 
    user = await loginUser(passwordController.text, nameController.text);
   on Exception 
    print(Text("Exception has occurred during login"));
  
                          
  // print(nameController.text);
  if(user.success) 
    addUser(user);

将用户添加到框的函数。我需要这个来使用 HiveUser 对象来成功添加它。但是用户作为来自 POST 响应正文的普通用户对象进来。

void addUser(User user) 
  // I need a HiveUser user here.
  final userBox = Hive.box('user');
  userBox.add(user);

最初使用的用户模型。

class User 
  bool success;
  String userID;
  String firstName;
  String lastName;


  User(this.success, this.userID, this.firstName, this.lastName);

  factory User.fromJson(Map<String, dynamic> json) 
    return User(
      success: json['success'],
      userID: json['UserID'],
      firstName: json['FirstName'],
      lastName: json['LastName'],

    );
  

【问题讨论】:

【参考方案1】:

我不知道您是否熟悉设计模式,但在这种情况下您需要一个中间层,在您的数据库/API 和模型(用户和 HiveUser)之间转换您的数据,或者为你做这件事的工厂构造函数

例如这样的方法

@HiveType(typeId: 0)
class HiveUser
  @HiveField(0)
  String name;

  @HiveField(1)
  String lastName;

  @HiveField(2)
  int age;

  @HiveField(3)
  String gender;

  HiveUser(this.name, this.lastName, this.gender, this.age);

  //just like you would decode a json into a model
  factory HiveUser.fromUser(User user)
     return HiveUser(
        name: user.name
        lastName: user.lastName
        gender: user.gender,
        age: user.age
     );
  

并在添加用户

void addUser(User user) 
  // I need a HiveUser user here.
  final userBox = Hive.box('user');
  userBox.add(HiveUser.fromUser(user));

最好有一个中间层来执行此操作,而不是修改模型类(例如 DAO)以将逻辑保留在 Hive 模型之外,但这应该让您了解您可以做什么

【讨论】:

正是我所需要的,我相信!唯一的问题是我在工厂里遇到了一个错误,说它没有得到任何位置参数。我相信我添加它们是正确的。几乎您在答案中的详细说明 好吧,我不确定,你能用错误更新吗,也许用户或 HiveUser 有他们的 getter 私有,我对你的模型不太了解 现在更新了用户模型 预期 4 个位置参数,找到 0 个。 在我的示例中,HiveUser 构造函数有 4 个命名参数,不是位置我不确定你的类模型构造函数如何

以上是关于在使用 Hive 进行颤振时,您如何将自定义对象从 POST 响应正文添加到框?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义对象添加到 xib 文件的“对象”部分?

如何将自定义对象的 NSArray 归档到 Objective-C 中的文件

如何将自定义数组保存/重新加载到 plist

如何在 agora web 中将自定义对象传递给远程流

如何将自定义 UIButton 添加到 Interface Builder 对象库?

有没有办法将自定义工具栏放在键盘上?