我很陌生,希望这个问题可以轻松解决,但是直到现在我还不知道出了什么问题。
我有一个应用,希望在按下搜索按钮后返回用户列表。我认为带有ListView.builder的FutureBuilder是对此的正确选择,但是即使我的异步函数肯定可以找到结果,我也无法以某种方式使我的数据出现在FutureBuilder中。 我的未来:
Future<List<Map<dynamic, dynamic>>> results;
按钮:
onPressed: () {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
setState(() {
results = null;
searched = true;
});
results = getGuestData(widget.place['placeName'], query);
}
},
异步功能:
Future<List<Map>> getGuestData(String placeName, Map query) async {
List<Map> result = [];
CollectionReference guestsRef = Firestore.instance
.collection(XXX)
.document(XXX)
.collection(XXX);
if (query['date'] == null) {
guestsRef
.where('lastName', isEqualTo: query['lastName'])
.where('firstName', isEqualTo: query['firstName'])
.getDocuments()
.then((doc) {
if (doc != null) {
result = doc.documents.map((x) => x.data).toList(); \\debugger shows this is working
}
}).catchError((e) => print("error fetching data: $e"));
}
return result;
最后是问题:
FutureBuilder<List<Map>>(
future: results,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
List guests = snapshot.data;
return ListView.builder(
shrinkWrap: true,
itemCount: guests.length,
itemBuilder: (context, index) {
return ListTile(
... //do stuff here
);
},
);
} else {
return CircularProgressIndicator();
}
},
)
snapshot.data实际上确实是一个列表,但是尽管getGuestData查询找到了用户,但是大小始终为0。