【问题标题】:Not receiving list from documents from firebase未收到来自 firebase 文件的列表
【发布时间】: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


    【解决方案1】:

    我认为您在这里错误地引用了用户购物车集合

    CollectionReference get cartReference =>
      Firestore.instance.collection('cart');
    

    根据您的 Firestore 结构中的图像,我认为您应该像这样引用购物车集合

    CollectionReference get cartReference =>
      Firestore.instance.collection('users/$id/cart');
    

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2014-02-18
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多