【发布时间】:2019-04-30 12:59:21
【问题描述】:
我从 Firestore 返回的数据有问题。我需要使用Cloud Firestore Plugin 收到一些电子邮件:
class _EmailPageState extends State<EmailPage> {
//StreamBuilder<QuerySnapshot> _emails;
@override
void initState() {
super.initState();
//_emails = _getEmails();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Refer user'),
),
body: Column(
children: <Widget>[
Form(... form code)
Expanded(child: _getEmails()),
],
)
}
由于在数据从 Firestore 返回之前不会填充 _emails,因此我得到:
flutter: The following assertion was thrown building Expanded(flex: 1, dirty):
flutter: A build function returned null.
flutter: The offending widget is: Expanded(flex: 1)
flutter: Build functions must never return null. To return an empty space that causes the building widget to
flutter: fill available room, return "new Container()". To return an empty space that takes as little room as
flutter: possible, return "new Container(width: 0.0, height: 0.0)".
我不明白如何解决这个错误。视图显示正确。但我不想出现错误。
StreamBuilder<QuerySnapshot> _getEmails() {
final query = Firestore.instance
.collection('emails')
.where("referer", isEqualTo: uid)
.snapshots();
return StreamBuilder<QuerySnapshot>(
stream: query,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) return Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Text('Loading...');
default:
return _makeList(snapshot);
}
},
);
//setState(() {
//_emails = emailList;
//});
//return emailList;
}
ListView _makeList(AsyncSnapshot<QuerySnapshot> snapshot) {
return ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return ListTile(
title: Text(document['email']),
);
}).toList(),
);
}
【问题讨论】:
标签: flutter google-cloud-firestore