嵌套的ListView,StreamBuilder和子集合

时间:2019-05-24 11:27:40

标签: flutter google-cloud-firestore

我正在尝试创建一个嵌套的ListView,但是不知道是否可以在嵌套视图中组合2个streambuilder,因为它不起作用。在带有子集合查询的第二个StreamBuilder中,似乎没有数据返回,我也不知道为什么。

当我对文档ID进行硬编码时,我没有收到任何错误,但查询似乎仍未返回任何数据。

有人知道,如何使用streambuilders和Firestore构建嵌套的listview吗?

  List<Widget> buildStreamedListView() {
return [ StreamBuilder(
    stream: Firestore.instance.collection('course')
              .document(widget.data.documentID)
              .collection('section')
              .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData) return const Text("Loading...");
      return Expanded(child: ListView.builder(
        itemCount: snapshot.data.documents.length,
        itemBuilder: (context, index) {
          //return buildListItem(context, snapshot.data.documents[index]);

          return Card(
            child: ExpansionTile(
              title: Text(snapshot.data.documents[index]['name']),
              children: <Widget>[
                StreamBuilder(
                  stream: Firestore.instance.collection('course')
                    .document(widget.data.documentID)
                    .collection('section')
                    .document('4CjAZEQ416NYpu3ra3OE')
                    .collection('page')
                    .snapshots(),
                  builder: (context, snap) {
                    return ListView.builder(
                      shrinkWrap: true,
                      itemCount: snap.data.documents.length,
                      itemBuilder: (context, index) {
                        return Text('Hello you');
                      }
                    );
                  }
                ),
              ],
            ),
          );
        }
      ));
    },
  )];

}

2 个答案:

答案 0 :(得分:0)

出现奇怪错误的原因是,在第二个构建器函数中,我没有添加以下代码:

if (!snapshot.hasData) return const Text("Loading...");

一旦我添加了它,它就会起作用。似乎数据还没有准备好,因此无法读取,从而导致错误。

答案 1 :(得分:0)

请注意还要在嵌套的snap.hasData()中测试StreamBuilder