Flutter QuerySnapshot返回null

时间:2020-05-08 12:14:35

标签: firebase flutter google-cloud-firestore

我真正想做的是获取“传递”集合中的所有ORDER ID(“ order_id”),并在另一个调用中使用这些ID,即输入“ orders”集合并告知所有ID作为文档进入“交付”集合。

我的流:

    function() {
        Firestore.instance
            .collection("delivers")
            .document("fvRpb1xDOKejJ5AEqXEeThaqhci1")
            .collection("orders")
            .snapshots()
            .listen((orders) {
          orders.documents.forEach((f) {
            print("+++++ First +++++ ${f.data}");
            Firestore.instance
                .collection("orders")
                .document(f.documentID)
                .snapshots();
          });
        });
      }

    My StreamBuilder Bellow:



body: Container(
        child: StreamBuilder<QuerySnapshot>(
            stream: function(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              print("SNAPSHOT DATA ++++++ ${snapshot.toString()} ++++++}");
              // if (snapshot.hasError)
              //   print("ERRO EM ++++++ ${snapshot.error.toString()} ++++++}");
              if (!snapshot.hasData)
                return Center(
                    child: RaisedButton(
                        onPressed: function, child: Text("press")));
              switch (snapshot.connectionState) {
                case ConnectionState.waiting:
                  return circularProgress();
                  break;
                default:
                  print(
                      "CONNECTION DEFAULT ++++++ ${snapshot.toString()} ++++++}");
                  return ListView(
                      children: snapshot.data.documents
                          .map((DocumentSnapshot myOrder) {
                    return Text(myOrder["quantity"]);
                  }).toList());
              }
            }),
      ),

退货:

I / flutter(600):+++++首先+++++ {order_id:2tC5gbAYLoj375w9HrKc}

正在执行热重装...⡿I / flutter(600):快照数据++++++ AsyncSnapshot(ConnectionState.none,null,null)++++++}

我的Firestore屏幕截图 https://drive.google.com/drive/u/0/folders/1ZeXog80wvnR-6cTG2VCE0jOVfrSEyDaM

2 个答案:

答案 0 :(得分:0)

您没有从function()返回任何信息。

在快照之前添加return关键字为:

return Firestore.instance
    .collection("delivers")
    .document("fvRpb1xDOKejJ5AEqXEeThaqhci1")
    .collection("orders")
    .snapshots();

或简单地将快照放在流的前面,如:

stream:Firestore.instance.collection('delivers').document('fvRpb1xDOKejJ5AEqXEeThaqhci1')____________.snapshots(),

答案 1 :(得分:0)

我有一个可能的问题原因:“即使数据在Firebase中,快照也始终为空”

可能是您的cloud_firestore中的pubspec.yaml版本导致了此问题。我尝试了各种在YouTube上获取数据的方法,但没有一种有效,最后我将cloud_firestore的版本从^0.14.4更改为^0.13.5,数据突然全部出现了!这是我在pubspec.yaml中所做的特定版本更改:注释是不起作用的新版本。

  # cloud_firestore: ^0.14.4
  cloud_firestore: ^0.13.5
  firebase: ^7.3.3
  # firebase_auth: ^0.18.4+1
  firebase_auth: ^0.15.4
  # firebase_core: ^0.5.3
  firebase_core: ^0.4.4

这可能不是造成您问题的原因,但可能会帮助其他人:D