【问题标题】:Cant Retrieve more than one collection in Flutter from cloud firestore无法从 Cloud Firestore 在 Flutter 中检索多个集合
【发布时间】:2020-11-23 11:15:05
【问题描述】:

伙计们,我要做的是从 Firestore 数据库中检索 2 个集合文档并在我的颤动中显示我的代码是:

Future<QuerySnapshot> getData() async {
    var firebaseUser = await FirebaseAuth.instance.currentUser();
    return await Firestore.instance
        .collection("user")
        .where("email", isEqualTo: firebaseUser.email)
        .getDocuments();
  }

  @override
  Widget build(BuildContext context) {
    // Build a Form widget using the _formKey created above.
    return FutureBuilder(
      future: getData(),

这允许我从特定用户检索数据,但我有另一种名为“shippingAddress”的表单,它创建如下集合:

void createRecord() async {
    await databaseReference.collection("shippingAddress").add({
      'alias': '$alias',
      'shippingName': '$shippingName',
      'shippinglastName': '$shippinglastName',
      'street': '$street',
      'streetNumber': '$streetNumber',
      'zipNumber': '$zipNumber',
      'phoneNumber': '$phoneNumber',
      'textMessage': '$textMessage',
      'totalQuantity': '$totalQuantity',
      'totalWeight': '$totalWeight',
    }).then((value) {
      print(value.documentID);
    });
  }

然后我还必须检索上述集合,但我不知道如何...因为在同一屏幕中我检索“用户”集合以仅显示来自特定用户的数据,并且我还需要检索“shippingAddress”集合,因为在这样的集合中还有其他数据要显示 例如,如果我检索

${snapshot.data.documents[index].data["email"]} or ${snapshot.data.documents[index].data["name"]}

我已经进入注册表,它可以工作,并在我的小部件中显示电子邮件或姓名,但如果我想例如检索:

${snapshot.data.documents[index].data["alias"]}

那是创建到“shippingAddress”集合中我无法获取它们

【问题讨论】:

标签: firebase flutter google-cloud-firestore


【解决方案1】:

我自己找到了解决方案。 首先从现有用户那里获取数据:

final databaseReference = Firestore.instance;

  Future<QuerySnapshot> getData() async {
    var firebaseUser = await FirebaseAuth.instance.currentUser();
    return await Firestore.instance
        .collection("user")
        .where("email", isEqualTo: firebaseUser.email)
        .getDocuments();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getData(),
      builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          return ListView.builder(
            itemCount: snapshot.data.documents.length,
              itemBuilder: (BuildContext context, int index) {
                return Column(
                    children: <Widget>[
                    Stream(),

并使用其他集合调用 Stream Builder:

lass Stream extends StatefulWidget {
  @override
  _StreamState createState() => _StreamState();
}

class _StreamState extends State<Stream> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('shippingAddress').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return Text('Loading data please Wait');
        return Column(
          children: <Widget>[
            Container(
              height: 1000,
              child: ListView.builder(
                itemCount: snapshot.data.documents.length,

就是这样!

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2021-06-28
    • 2021-05-05
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多