我的问题是,当加载主页时,我想返回一个函数作为支架的主体,以检查流(组,其状态由super.initState设置的查询快照)是否不存在。等于null,如果组不等于null,我想显示包含组名和所有者的卡列表。如果组等于null我想显示一张被点击的卡,将使用户能够创建一个组,因此该页面在应用启动时加载,并在该页面显示后不久显示一张卡用于组创建(调试时)。重新渲染,并且当出于某种原因将组流对象传递给条件对象时,它不等于null,但无论如何,通过条件传递条件后,据我所知查询快照中没有任何内容。被调用,并向我显示“ getter'documents'在null上被调用。 接收者:null 尝试调用:“文档”。 这是我的代码,很抱歉,如果我通知您我不熟悉堆栈发布。
getUsersGroups() async{
var usr = await _firebaseAuth.currentUser();
return _firestore.collection('groups').where('members',arrayContains: usr.email).snapshots();}
@override
void initState() {
_dataService.getUsersGroups().then((results) {
setState(() {
groups = results;
});
});
super.initState();
}
groupCardList() {
if (groups != null){
return StreamBuilder(
stream: groups,
builder: (context, snapshot) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
padding: EdgeInsets.all(16.0),
itemBuilder: (context, i){
return new InkWell(
child: Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top:8.0, bottom: 4.0),
child: Column(
children: <Widget>[
Text(snapshot.data.documents[i].data['name'],style: TextStyle(fontSize: 25.0),),
Spacer(),
Text(snapshot.data.documents[i].data['owner'],style: TextStyle(fontSize: 10.0),),
getUsersGroups()位于data_services.dart文件中。
答案 0 :(得分:0)
首先,您不需要在initState()中设置setState():
您的getUserGroups应该类似于:
Stream<QuerySnapshot> getUserGroups() {
return _firestore.collection('groups').where('members',arrayContains: usr.email).snapshots();
}
// in your StatefulWidget:
Stream<QuerySnapshot> groups;
@override
void initState() {
groups = _dataService.getUserGroups();
}
现在您的问题。我相信该组!= null是因为创建了对象QuerySnapshot。您可以在StreamBuilder中检查组是否有数据:
return StreamBuilder(
stream: groups,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasData) {
return ListView.builder { ... }
}
return (whatever you want to return when groups == null)
);
我希望它会有所帮助:)