【问题标题】:Get array collection of an object from firebase flutter从 firebase flutter 获取对象的数组集合
【发布时间】:2021-09-05 06:45:05
【问题描述】:

我正在尝试从特定用户获取 Products 集合,但该请求不起作用。 这是我的代码:

第一个请求函数:

Stream<QuerySnapshot<Object>> get productsUser {
    return usersCollection.doc(uid).collection("Products").snapshots();
  }

在这里我尝试展示我获取(或没有...)的 Products 数组:

class _ProductPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final GivitUser givitUser = Provider.of<GivitUser>(context);
    final DatabaseService db = DatabaseService(uid: givitUser.uid);
    return StreamBuilder<QuerySnapshot>(
        stream: db.productsUser,
        builder: (context, snapshotProduct) {
          if (snapshotProduct.hasError) {
            return Text('Something went wrong');
          }

          if (snapshotProduct.connectionState == ConnectionState.waiting) {
            return Loading();
          }

          return Container(
            color: Colors.blue[100],
            height: 400.0,
            alignment: Alignment.topCenter,
            child: SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.start,
                children: snapshotProduct.data.docs.map(
                  (DocumentSnapshot document) {
                    var snapshotdata = document.data() as Map;
                    Product product =
                        Product.productFromDocument(snapshotdata, document.id);
                    print(product.name);
                    return Container(
                      child: Text(product.name),
                    );
                  },
                ).toList(),
              ),
            ),
          );
        });
  }
}
          );

感谢所有愿意提供帮助的人! :)

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore stream-builder


    【解决方案1】:

    您可以创建StatefulWidget,并将获取的结果存储为状态,也可以使用StreamBuilder 为您管理状态,并在每次收到新快照时自动重建小部件树.无论哪种情况,以下两个指南也可能会有所帮助:

    下面是一个示例,说明在您的情况下如何使用 StreamBuilder:

    Widget build(BuildContext context) {
      return Container(
        color: Colors.blue[100],
        height: 400.0,
        alignment: Alignment.topCenter,
        child: SingleChildScrollView(
          child: StreamBuilder<QuerySnapshot<Object>>(
            stream: usersCollection.doc(uid).collection("Products").snapshots(),
            builder: (context, asyncSnapshot) => Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.start,
              children: asyncSnapshot.data.data.docs.map(
                (DocumentSnapshot document) {
                  var snapshotdata = document.data() as Map;
                  Product product =
                      Product.productFromDocument(snapshotdata, document.id);
                  print(product.name);
                  return Container(
                    child: Text(product.name),
                  );
                },
              ).toList(),
            ),
          ),
        ),
      );
    }
    

    【讨论】:

    • 我已经按照您的建议使用了 StreamBuilder,现在我编辑了代码,以便您可以看到完整版本。也许是另一个想法,或者现在您可以发现潜在的问题?
    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2020-09-07
    • 2021-03-06
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多