【问题标题】:How to get a list of feed items from a Query Document Snapshot?如何从查询文档快照中获取提要项目列表?
【发布时间】:2021-01-03 20:32:24
【问题描述】:

我已经尝试了以下两种代码:一种是 StreamBuilder.ListView,另一种是 StreamBuilder.ListView.builder。我无法得到结果。它显示

在 null 上调用了“数据”方法。接收者:null 尝试调用: 数据()

我无法了解 QuerySnapshots 的工作原理

class FeedStream extends StatelessWidget {
  FeedStream();
  Map document;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseFirestore.instance.collection('users').snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (!snapshot.hasData) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          return ListView.builder(
            itemCount: 2,
            itemBuilder: (context, index) {
              return _buildList(context, snapshot.data.docs[index]);
            },
          );
        },
      ),
    );
  }

  Widget _buildList(BuildContext context, DocumentSnapshot document) {
    return ListTile(
      title: Text(document.data()['displayName']),
      subtitle: Text(document.data()['bio']),
    );
  }
}



class FeedStream extends StatelessWidget {
  FeedStream();
  Map document;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseFirestore.instance.collection('users').snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (!snapshot.hasData) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          return ListView(
            children: snapshot.data.docs.map((document) {
              return Center(
                child: Container(
                  height: MediaQuery.of(context).size.height / 6,
                  child:
                      Text('Name:' + document.data()['displayName'].toString()),
                ),
              );
            }).toList(),
          );
        },
      ),
    );
  }
}

有人可以解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    StreamBuilder 有一个名为 initialData 的属性。您可以尝试给它一个空列表。

    例子:

    StreamBuilder<T>(
             initialData: [], 
             stream: _myStream,
             builder: _myBuilder,
    );
    

    【讨论】:

      【解决方案2】:

      你是说有两个文件:

        return ListView.builder(
          itemCount: 2, // HERE
          itemBuilder: (context, index) {
            return _buildList(context, snapshot.data.docs[index]);
          },
        );
      

      但情况并非总是如此,当文档少于 2 个时,您会收到您所看到的错误。

      解决方法是返回查询快照中文档数对应的item count:

        return ListView.builder(
          itemCount:, snapshot.data.docs.length,
          itemBuilder: (context, index) {
            return _buildList(context, snapshot.data.docs[index]);
          },
        );
      

      【讨论】:

      • 嗨弗兰克·范·普菲伦。感谢您的回答。我又试了一次。它仍然显示相同的错误
      猜你喜欢
      • 2018-11-14
      • 2021-04-21
      • 2019-08-02
      • 1970-01-01
      • 2020-07-15
      • 2020-10-12
      • 2019-03-22
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多