【发布时间】:2021-09-17 06:01:12
【问题描述】:
我正在为服装店创建一个应用程序,我有一个主屏幕、登录屏幕、注册等。
我在从当前用户收集一些收藏品和文档时遇到问题,此收藏品将用他们在购物车中的物品构建一张卡片。
这就是我的 cartManager 的构建方式:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:loja_virtual_nnananene/models/cart_product.dart';
import 'package:loja_virtual_nnananene/models/product.dart';
import 'package:loja_virtual_nnananene/models/user.dart';
import 'package:loja_virtual_nnananene/models/user_manager.dart';
class CartManager {
List<CartProduct> items = [];
User? user;
void updateUser(UserManager userManager) {
user = userManager.user;
items.clear();
if (user != null) {
_loadCartItems();
}
}
Future<void> _loadCartItems() async {
final QuerySnapshot cartSnap = await user!.cartReference.getDocuments();
items = cartSnap.documents.map((d) => CartProduct.fromDocument(d)).toList();
print(items);
}
void addToCart(Product product) {
items.add(CartProduct.fromProduct(product));
}
}
在 print(items) 中,尽管我在购物车 (firebase) 中有物品,但我收到的是 null。
这是用户页面:
import 'package:cloud_firestore/cloud_firestore.dart';
class User {
User({this.email, this.password, this.name, this.id});
User.fromDocument(DocumentSnapshot document) {
id = document.documentID;
name = document.data['name'];
email = document.data['email'];
}
String? name;
String? email;
String? password;
String? confirmPassword;
String? id;
DocumentReference get firestoreRef =>
Firestore.instance.document('users/$id');
CollectionReference get cartReference =>
Firestore.instance.collection('cart');
Future<void> saveData() async {
await firestoreRef.setData(toMap());
}
Map<String, dynamic> toMap() {
return {'name': name, 'email': email};
}
}
这是购物车产品,甚至没有运行打印:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:loja_virtual_nnananene/models/item_size.dart';
import 'package:loja_virtual_nnananene/models/product.dart';
class CartProduct {
final Firestore firestore = Firestore.instance;
CartProduct.fromProduct(this.product) {
productId = product?.id;
quantity = 1;
size = product?.selectedSize!.name;
}
CartProduct.fromDocument(DocumentSnapshot document) {
productId = document.data['pid'] as String;
print(productId);
print('here');
quantity = document.data['quantity'] as int;
size = document.data['size'] as String;
firestore
.collection('products')
.document(productId)
.get()
.then((doc) => product = Product.fromDocument(doc));
}
String? productId;
int? quantity;
String? size;
Product? product;
ItemSize? get itemSize {
// ignore: unnecessary_null_comparison
if (product == null) return null;
return product?.findSize(size!);
}
num get unitPrice {
if (product == null) return 0;
return itemSize?.price ?? 0;
}
}
我有一些来自我的数据库的照片,每个用户都有他的购物车,这为另一个包含产品的集合提供了参考: User cart
这是产品系列: Products
【问题讨论】:
标签: firebase flutter google-cloud-firestore flutter-layout