【问题标题】:How to make a Model Class Within Model Class (Flutter / Dart)如何在模型类中创建模型类(Flutter / Dart)
【发布时间】:2021-11-05 13:39:28
【问题描述】:

我正在尝试使用 Flutter 制作多供应商应用程序。 我现在面临的问题是如何在模型类中创建模型类:

示例:

class ProductModel {
String? name;
double? price;
String? imgUrl;
double? weight;

ProductModel();

ProductMode.fromSnapShot(DocumentSnapshot snapshot){
name = snapshot['name'];
price= snapshot['price'];
imgUrl= snapshot['imgUrl'];
weight= snapshot['weight'];
}
}

我已经检索到Firestore的所有产品:

class VendorModel{
String? name;
String? imgUrl;
DateTime? opensAt;
DateTime? closesAt;


VendorModel();

VendorModel.fromSnapshot(DocumentSnapshot snapshot){
name = snapshot['name'];
imgUrl= snapshot['imgUrl'];
opensAt= DateTime.tryParse(snapshot['opensAt'].toString());
closesAt= DateTime.tryParse(snapshot['closesAt'].toString());
}
}

我还从 Firestore 中检索了所有供应商:

这是我想要做的: 我想将我从Firestore 获取的产品添加到使用此模型的各自供应商。但如果我的数据来自Firestore,我不知道该怎么做。

class VendorWithProductsModel{
VendorModel vendor;
List<ProductModel> products;

VendorWithProductsModel();
(I AM STUCK HERE)
}

这是我在检索产品和供应商时的Firestore 代码片段:

VendorModel _vendor = VendorModel();
List<VendorModel> _allVendors = [];

Future<VendorModel> getCertainVendor(docId) async{
    await vendor.doc(docId).get().then((value){
      _vendor = VendorModel.fromSnapshot(value);
    });
    return _vendor;
  }
Future<List<VendorModel>> getAllVendors() async{
    await vendor.get().then((value){
      _allVendors.add(VendorModel.fromSnapshot(value));
    });
    return _allVendors;
  }

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore model


    【解决方案1】:
    • 在您的产品模型中,您需要像vendorId 这样的东西,您可以在其中知道哪个产品属于哪个供应商。

    • 在获取您的所有产品和供应商之后。使用这两个列表,并循环它们,这是伪代码,例如:

    List<VendorWithProductsModel> doMagic (List<ProductModel> productList, List<VendorModel> vendorList) {
    
      List<VendorWithProductsModel> vendorsWithProducts =[];
      vendorList.forEach((vendor){ 
        VendorWithProductsModel _vendorAndProduct = VendorWithProductsModel();
        _vendorAndProduct.vendor = vendor;
        _vendorAndProduct.products =[];
        _vendorAndProduct.products = productList.where((e)=> e.vendorId == vendor.id).toList();
        vendorsWithProducts.add(_vendorAndProduct);
      });
    
     return vendorsWithProducts;
    }
    
    

    【讨论】:

    • 感谢您的快速回复..但我有一个错误.. return _vendorAndProduct;我在这里遇到错误..“未定义名称'_vendorAndProduct'。”
    • 我终于明白了..非常感谢..我刚刚将return _vendorAndProduct;更改为return vendorsWithProducts;
    • 不客气,我也在答案中修改了它。快乐编码:-)
    猜你喜欢
    • 2021-11-13
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2016-05-28
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多