使用嵌套地图检索数据并将其保存到 Firebase - Flutter [关闭]

Posted

技术标签:

【中文标题】使用嵌套地图检索数据并将其保存到 Firebase - Flutter [关闭]【英文标题】:Use nested maps to retrieve and save data to Firebase - Flutter [closed] 【发布时间】:2021-01-07 19:37:26 【问题描述】:

我正在使用三个模型来检索数据并将其写入我的 Cloud Firestore。

//Sales model
class Sales 
  String id;
  String userId;
  SalesDetails salesDetails;
  Timestamp createdAt;
  Timestamp updatedAt;

  Sales();

  Sales.fromMap(Map<String, dynamic> data) 
    id = data['id'];
    userId = data['user_id'];
    salesDetails = SalesDetails.fromMap(data['sales_details']);
    createdAt = data['created_at'];
    updatedAt = data['updated_at'];
  

  Map<String, dynamic> toMap() 
    return 
      'id': id,
      'user_id': userId,
      'sales_details': salesDetails,
      'created_at': createdAt,
      'updated_at': updatedAt,
    ;
  

//销售详情模型

class SalesDetails 
  String id;
  PurchasedItems purchaseItems;
  String bankTransferSenderName;
  String chequeInfo;
  String creditPayLaterInfo;
  String customerId;
  String customerFirstName;
  String customerLastName;
  double subTotalAmount;
  double totalAmount;
  double taxesDue;
  bool isComplete;
  Timestamp createdAt;
  Timestamp updatedAt;

  SalesDetails();

  SalesDetails.fromMap(Map<String, dynamic> data) 
    id = data['id'];
    purchaseItems = PurchasedItems.fromMap(data['purchased_items']);
    bankTransferSenderName = data['bank_transfer_sender_name'];
    chequeInfo = data['cheque_info'];
    creditPayLaterInfo = data['credit_pay_later_info'];
    customerId = data['customer_id'];
    customerFirstName = data['customer_first_name'];
    customerLastName = data['customer_last_name'];
    subTotalAmount = data['sub_total_amount'];
    totalAmount = data['total_amount'];
    taxesDue = data['taxes_due'];
    isComplete = data['is_complete'];
    createdAt = data['created_at'];
    updatedAt = data['updated_at'];
  

  Map<String, dynamic> toMap() 
    return 
      'id': id,
      'purchased_items': purchaseItems,
      'bank_transfer_sender_name': bankTransferSenderName,
      'cheque_info': chequeInfo,
      'credit_pay_later_info': creditPayLaterInfo,
      'customer_id': customerId,
      'customer_first_name': customerFirstName,
      'customer_last_name': customerLastName,
      'sub_total_amount': subTotalAmount,
      'total_amount': totalAmount,
      'taxes_due': taxesDue,
      'is_complete': isComplete,
      'created_at': createdAt,
      'updated_at': updatedAt,
    ;
  

//PurchasedItem型号

class PurchasedItems 
  String itemId;
  String itemName;
  String itemDescription;
  int itemQuantity;

  PurchasedItems();
    
  PurchasedItems.fromMap(Map<String, dynamic> data) 
    itemId = data['item_id'];
    itemName = data['item_name'];
    itemDescription = data['item_description'];
    itemQuantity = data['itemQuantity'];
  

  Map<String, dynamic> toMap() 
    return 
      'id': itemId,
      'user_id': itemName,
      'item_quantity': itemQuantity,
      'item_description': itemDescription,
    ;
  

在观看有关 Maps vs Arrays vs Collection/documents 的官方 Firestore 视频后,我决定子集合/文档可能对我来说是最好的,因为我在我的应用程序上显示信息的方式。

    我的 toMap 和 fromMap 方法是否正确实现? 这是嵌套太深了吗? 我应该将销售详细信息和购买项目保留为地图,还是将它们作为自己的类? 对于我当前的实现,有没有更好的方法?使用依赖于其他类模型的模型的推荐标准是什么?

谢谢。

【问题讨论】:

【参考方案1】:

    我的 toMap 和 fromMap 方法,它们的实现是否正确?

    我觉得它们很好。

    这是嵌套太深了吗?

    这是一个小规模,所以我不认为你嵌套太多也许当你打算或者如果你要添加更多是的,那么也许最好想一个更好的方法来嵌套它们。

    我应该将销售详细信息和购买项目保留为地图,还是将它们作为自己的类?

    这里真的取决于你打算对它们做更多的事情,如果你想在其他部分重用它们,你可以尝试将它们作为自己的类,但如果不需要,它们就可以了。

    目前的实施是否有更好的方法?使用依赖于其他类模型的模型的推荐标准是什么?

    看起来不错,实际上取决于您想要做什么。既然您说要向 Cloud Firestore 写入和读取数据,我已经为此检查了文档 (https://firebase.google.com/docs/firestore/query-data/get-data#java) 并采用了 Java android 示例,这应该是“推荐”的方式。

【讨论】:

谢谢!我真的很感激。

以上是关于使用嵌套地图检索数据并将其保存到 Firebase - Flutter [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌地图标记上显示信息

解析嵌套的 JSON 并将其保存到 SQLite 中,然后检索它

从 Firebase 检索位置并将标记放在谷歌地图上

geofire android 存储和检索位置并将其显示在地图上

如何从firebase数据库中检索数据作为字符串而不是字典并将其添加到数组中?

从 firebase 检索数据并将其显示在可扩展的 recyclerview 中