Flutter上Listview的快照长度

时间:2018-10-23 01:42:47

标签: listview flutter snapshot

我需要在Flutter上实现一个ListView,并且我要传递snapshot.data.length作为itemCount的参数:

return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(                            
snapshot.data[index].data["Identificacao"],...

然后我得到一个错误:

I/flutter ( 4647): Class 'List<DocumentSnapshot>' has no instance getter 'length'.
I/flutter ( 4647): Receiver: Instance(length:1) of '_GrowableList'
I/flutter ( 4647): Tried calling: length

但是我见过的许多教程都使用了这些sintax。我曾尝试使用:

snapshot.data.documents.length;

,但结果相同。请帮帮我!

6 个答案:

答案 0 :(得分:3)

如果您正在使用StreamBuilder,则查找数据长度的方法并非如此。

snapshot.data.length

由于您询问快照实例的长度而无法正常工作,因此您将出现无此方法无此类错误

所以你应该做的。

snapshot.data.snapshot.value.length

让我给你看一个例子

StreamBuilder(
    stream: FirebaseDatabase.instance
              .reference()
              .child("users")
              .orderByChild('firstName')
              .limitToFirst(20)
              .onValue,
    builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                itemCount: snapshot.data.snapshot.value.lenght,//Here you can see that I will get the count of my data
                  itemBuilder: (context, int) {
                  //perform the task you want to do here
                    return Text("Item count ${int}");
                  });
            } else {
              return Container();
            }
      },
  ),

您还可以查看关于stream和futurbuilder https://stackoverflow.com/a/50844913/9949983

有什么区别的答案

答案 1 :(得分:1)

通过替换解决了问题

StreamBuilder<Object> 

StreamBuilder<QuerySnapshot> 

默认情况下,StreamBuilder 以这种形式出现 StreamBuilder

这将 100% 有效

答案 2 :(得分:0)

我用它来映射和递增以获取快照的长度:

int snapshotLength = 0;

snapshot.data.documents.map<YourGenericType>((document){
 snapshotLength++;
 print("Snapshot length: $snapshotLength");
}

答案 3 :(得分:0)

在flutter中使用StreamBuilder小部件。

StreamBuilder(
        stream: Firestore.instance
                .collection('followers')
                .document(<DocID>)
                .collection('<COLLECTION>')
                .snapshots(),
        builder: (context, snapshot) {
                QuerySnapshot values = snapshot.data;
                print(values.length);
       },
);

答案 4 :(得分:0)

仅尝试: snapshot.data.documents.length 不建议在vscode ide dart插件中使用,但可以使用。

答案 5 :(得分:-1)

也许是snapshot.documents.length吗?