我已经尝试了以下两个代码:一个使用StreamBuilder.ListView,另一个使用StreamBuilder.ListView.builder。我没有结果。它显示
方法'data'在null上被调用。接收方:null尝试调用: data()
我无法了解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(),
);
},
),
);
}
}
有人可以解决这个问题吗?
答案 0 :(得分:0)
您是说有两个文档:
return ListView.builder(
itemCount: 2, // HERE
itemBuilder: (context, index) {
return _buildList(context, snapshot.data.docs[index]);
},
);
但这并非总是如此,当文档少于2个时,您会看到错误。
解决方案是返回与查询快照中的文档数相对应的项目数:
return ListView.builder(
itemCount:, snapshot.data.docs.length,
itemBuilder: (context, index) {
return _buildList(context, snapshot.data.docs[index]);
},
);
答案 1 :(得分:0)
StreamBuilder具有一个名为initialData的属性。您可以尝试给它一个空列表。
示例:
StreamBuilder<T>(
initialData: [],
stream: _myStream,
builder: _myBuilder,
);