Flutter Cloud Firestore ODM:如何转换DocumentReference泛型类型
解决Firestore ODM中VendorDocumentReference转DocumentReference<Map<String, dynamic>>的问题
Firestore ODM生成的VendorDocumentReference本质是原生Firestore引用的包装类,你可以通过它内部暴露的原生引用属性直接转换,具体实现如下:
直接转换方法
假设你已经获取了目标供应商的VendorDocumentReference实例:
// 获取目标供应商的ODM引用 final VendorDocumentReference vendorDocRef = vendorsRef.doc('vendor1');
直接提取其内部的原生reference属性,即可得到DocumentReference<Map<String, dynamic>>类型的引用:
DocumentReference<Map<String, dynamic>> rawVendorRef = vendorDocRef.reference;
用于创建Invoice的完整示例
// 获取供应商引用 final VendorDocumentReference vendorDocRef = vendorsRef.doc('vendor1'); // 转换为原生无类型引用 final rawVendorRef = vendorDocRef.reference; // 创建新Invoice实例 final newInvoice = Invoice( id: 'new_invoice_id', vendor: rawVendorRef, ); // 保存到Firestore await invoicesRef.doc(newInvoice.id).set(newInvoice);
便捷扩展(可选)
如果需要频繁转换,可以给VendorDocumentReference扩展一个便捷方法:
extension VendorDocRefExtension on VendorDocumentReference { DocumentReference<Map<String, dynamic>> toRawReference() { return reference; } }
使用时更简洁:
final rawRef = vendorDocRef.toRawReference();
补充说明
Firestore ODM生成的所有文档引用类(比如VendorDocumentReference)都会内置一个reference属性,指向原生的DocumentReference<Map<String, dynamic>>,这是ODM和底层Firestore SDK交互的核心依赖,直接使用这个属性是最安全且高效的方式。
内容的提问来源于stack exchange,提问作者Nuno Santos
相关产品推荐
相关产品推荐

