使用嵌套贴图检索数据并将其保存到Firebase-Flatter

使用嵌套贴图检索数据并将其保存到Firebase-Flatter,firebase,flutter,google-cloud-firestore,flutter-dependencies,Firebase,Flutter,Google Cloud Firestore,Flutter Dependencies,我有三个模型,用于检索数据并将数据写入我的云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'];

我有三个模型,用于检索数据并将数据写入我的云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,
    };
  }
}
//销售模式
班级销售{
字符串id;
字符串用户标识;
销售详情销售详情;
时间戳createdAt;
时间戳更新数据;
销售();
Sales.fromMap(地图数据){
id=数据['id'];
userId=data['user_id'];
salesDetails=salesDetails.fromMap(数据['sales_details']);
createdAt=data['created_at'];
updatedAt=数据['updated_at'];
}
映射toMap(){
返回{
“id”:id,
“用户id”:用户id,
“销售详细信息”:销售详细信息,
“created_at”:createdAt,
'updated_at':updatedAt,
};
}
}
//SalesDetails模型

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,
    };
  }
}
类销售详情{
字符串id;
PurchasedItems采购项目;
字符串bankTransferSenderName;
字符串支票信息;
字符串creditPayLaterInfo;
字符串customerId;
字符串customerFirstName;
字符串customerLastName;
双倍小计金额;
双倍总额;
双重征税;
布尔完成;
时间戳createdAt;
时间戳更新数据;
销售详情();
SalesDetails.fromMap(地图数据){
id=数据['id'];
purchaseItems=PurchasedItems.fromMap(数据['PurchasedItems']);
bankTransferSenderName=数据['bank_transfer_sender_name'];
chequeInfo=数据['check_info'];
creditPayLaterInfo=数据['credit_pay_later_info'];
customerId=数据['customer_id'];
customerFirstName=数据['customer_first_name'];
customerLastName=数据['customer_last_name'];
小计金额=数据[“小计总额”];
totalAmount=数据[“总金额];
taxesDue=数据[‘到期税款’];
isComplete=数据['is_complete'];
createdAt=data['created_at'];
updatedAt=数据['updated_at'];
}
映射toMap(){
返回{
“id”:id,
“已购买物品”:已购买物品,
“银行转账发送方名称”:银行转账发送方名称,
“支票信息”:支票信息,
“信用支付日后信息”:信用支付日后信息,
“客户id”:客户id,
“customer\u first\u name”:customer firstname,
“客户姓氏”:客户姓氏,
“小计总额”:小计金额,
“总金额”:总金额,
“应交税费”:应交税费,
'is_complete':isComplete,
“created_at”:createdAt,
'updated_at':updatedAt,
};
}
}
//采购模式

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,
    };
  }
}
类PurchasedItems{
字符串itemId;
字符串itemName;
字符串项描述;
整数项数量;
PurchasedItems();
PurchasedItems.fromMap(地图数据){
itemId=数据['item_id'];
itemName=数据['item_name'];
itemDescription=数据['item_description'];
itemQuantity=数据['itemQuantity'];
}
映射toMap(){
返回{
“id”:itemId,
“用户id”:itemName,
“项目数量”:项目数量,
“项目描述”:项目描述,
};
}
}
在观看了Firestore在地图、阵列和集合/文档上的官方视频后,我决定,由于我在应用程序上显示信息的方式,子集合/文档可能是最适合我的

  • 我的toMap和fromMap方法是否正确实现
  • 这个嵌套太深了吗
  • 我应该把销售细节和购买物品作为地图,还是作为自己的课程
  • 有没有更好的方法来实现我当前的实现?与依赖于其他类模型的模型一起工作的推荐标准是什么
  • 谢谢

  • 我的toMap和fromMap方法是否正确实现

    我觉得它们很好

  • 这个嵌套太深了吗

    这是一个小规模,所以我不认为你嵌套太多,也许当你要或如果你要添加更多的是,那么也许它会更好地考虑一个更好的方式来嵌套他们

  • 我应该把销售细节和购买物品作为地图,还是作为自己的课程

    这取决于你打算用它们做些什么,如果你想在其他部分重用它们,你可以试着把它们作为自己的类,但如果不需要,它们就很好

  • 有没有更好的方法来实现当前的实施?与依赖于其他类模型的模型一起工作的推荐标准是什么

    看起来不错,这取决于你的需要和你想做什么。既然你说你想向CloudFireStore写入和读取数据,我已经检查了文档()并以JavaAndroid为例,这应该是“推荐”的方法


  • 谢谢我真的很感激。